【发布时间】:2017-12-25 20:16:12
【问题描述】:
我有一个奇怪的问题。我在 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) 处,我得到了正确的值。
但是如果我再调用它(同一个地方,就在上面的代码之后),settings[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) 处,我变得空虚。
有人知道为什么吗?谢谢!
【问题讨论】:
-
strr 是一个具有自动存储时长的局部变量。它的作用域是 for 循环的代码块。退出循环后,变量不再存活,对应的指针无效。
-
const char* str是一个指针,你将它指向在作用域结束时被销毁的临时对象,你期望什么? -
你是对的。但是如何将字符串值从 strr 永久复制到 settings[i].str 中?
-
@Steve: A recommended read.