2015-10-13 62 views
-2

我有结构分配值结构包含在数组成员

struct SerialNumberData* serialNumberArrayTest 

的阵列和我的结构定义为

struct SerialNumberData 
{ 
    const char* serialNumber; 
    const char* serialNumberPos; 
}; 

什么IM tryng做的是将值分配给成员结构,然后将结构添加到数组中。我输入一个循环,其中值被分配给每个结构,然后传递给数组。

for(int i=0; i<numArrays;i++){ 
    std::string serial = "serialNumberArray"; 
    oss << i; 
    serial += oss.str(); 
    std::string readLine = "Some value" + serial; 
    size_t pos = 0; 
    std::string token = "Some other value" + serial; 

    serialNumberArrayTest[i].serialNumber = token.c_str(); 
    serialNumberArrayTest[i].serialNumberPos = readLine.c_str(); 
    //..Logger writes the values to an external log file 
    oss.str(""); 
    oss.clear(); 
} 

问题是最后一个结构体的值被保存到数组中包含的所有结构体的值。记录器在日志文件中写入正确的值,但是如果我也在for循环之后再次登录,则所有值都将被最后一个值覆盖。

我已经尝试了很多事情来说明在这一点上,甚至有一个向量,但没有成功。任何帮助或建议将不胜感激。

+3

您正在存储指向结构体中的本地('token'和'readLine')的指针。这些当地人在循环后消失,并可能在循环中被覆盖。在结构中用'std :: string'替换'const char *',并使用'std :: vector'或'std :: array'来存储结构数组。它会为你节省很多头痛。 – crayzeewulf

+2

@crayzeewulf'std :: string'很可能是更好的选择。 –

+1

@πάνταῥεῖ特别是因为他使用C++,所以我想不出使用'std :: string'的好理由。 –

回答

1
serialNumberArrayTest[i].serialNumber = token.c_str(); 
serialNumberArrayTest[i].serialNumberPos = readLine.c_str(); 

您正在存储指向临时对象的指针。不要这样做。决定谁管理内存的生命周期并实现它。如果结构管理自己数据的生命周期,请使用:

serialNumberArrayTest[i].serialNumber = strdup (token.c_str()); 
serialNumberArrayTest[i].serialNumberPos = strdup (readLine.c_str()); 
+0

像魅力一样工作,谢谢! –