为数组中包含的结构成员赋值
Assign values to struct members contained in an array
我有一个结构数组
struct SerialNumberData* serialNumberArrayTest
我的结构定义为
struct SerialNumberData
{
const char* serialNumber;
const char* serialNumberPos;
};
我想做的是为结构的成员赋值,然后将结构添加到数组中。我进入一个循环,其中将值分配给每个结构,然后传递给数组。
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 循环后再次记录,所有值都会被最后一个值覆盖。
在这一点上,我已经尝试了很多事情,无法一一列举,甚至尝试过向量,但没有成功。任何帮助或建议将不胜感激。
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());
我有一个结构数组
struct SerialNumberData* serialNumberArrayTest
我的结构定义为
struct SerialNumberData
{
const char* serialNumber;
const char* serialNumberPos;
};
我想做的是为结构的成员赋值,然后将结构添加到数组中。我进入一个循环,其中将值分配给每个结构,然后传递给数组。
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 循环后再次记录,所有值都会被最后一个值覆盖。
在这一点上,我已经尝试了很多事情,无法一一列举,甚至尝试过向量,但没有成功。任何帮助或建议将不胜感激。
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());