【发布时间】:2015-10-13 20:23:17
【问题描述】:
我有一个结构数组
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 循环后再次记录,所有值都会被最后一个覆盖。
在这一点上,我已经尝试了很多无法重述的事情,甚至尝试过矢量但没有成功。任何帮助或建议将不胜感激。
【问题讨论】:
-
您正在结构中存储指向本地变量(
token和readLine)的指针。这些局部变量在循环后消失,也可能在循环内被覆盖。将结构中的const char*替换为std::string,并使用std::vector或std::array来存储结构数组。它将为您省去很多麻烦。 -
@crayzeewulf
std::string很可能是更好的选择。 -
@πάνταῥεῖ 特别是因为他使用的是 C++,我想不出一个不使用
std::string的充分理由。 -
我无法将 const char* 替换为 std::string,因为此代码是遗留代码的一部分。不应该在 for 循环的每次传递中存储和写入值吗?
-
@DavidA 你了解遗留代码的工作原理吗?谁管理这些指针指向的对象的生命周期?
标签: c++ arrays pointers structure