我有一个奇怪的问题。我在struct数组中分配char []值,但它们会丢失: -------结构就是这个:
typedef struct _Settings
{
const char* str;
uint val;
}Settings;
-------我这样创建:
int nn=10;
settings = new Settings[nn];
for (int i = 0; i < nn; i++) {
string strr = "thisOneIs";
strr.append(std::to_string(i));
settings[i].str = strr.c_str();
string teststr = settings[i].str; //// (1)
settings[i].val = i + 1;
}
.....在(1),我得到正确的值。
但是如果我然后调用它(相同位置,就在上面的代码之后),则设置[i] .str为空:
for (int i = 0; i < nn; i++) {
string teststr = settings[i].str; ///// (2)
std::cout << settings[i].str << "=" << settings[i].val << "\n";
}
...在(2),我变空了。
有没有人知道为什么?谢谢!
答案 0 :(得分:2)
(1)处的行是一个问题,因为您正在存储一个指向某个内存的指针,该指针在循环结束时无效。
string strr = "thisOneIs"; // A temporary object in the loop.
strr.append(std::to_string(i));
settings[i].str = strr.c_str(); // Pointer that won't be valid when the loop ends.
如果您了解低级语言功能,可以尝试使用char*
和原始内存。如果您想获得一个有效的程序,只需使用std::string
。
还简化了Settings
的定义。你不需要C ++中的所有typedef
无意义。
struct Settings
{
std::string str;
uint val;
};