Possible Duplicate:
c++ warning: address of local variable
char* strdup(const char* s)
{
char dup[strlen(s)];
for (int i = 0; i<strlen(s); i++)
{
dup[i]=s[i];
}
return dup;
}
该函数应该保留已向后读取的新数组以及另一个插槽。当我编译它时,出现错误“警告:返回了本地变量'dup'的地址”,当我运行程序时,它返回了内存地址。
最佳答案
char dup[strlen(s)]
定义一个本地堆栈变量;当函数结束时,这超出了范围,因此在此之后进行任何访问它的尝试都将导致未定义的行为。
您的选择是:
使用堆变量(使用new
获得)。您将不得不记住在某些时候delete
。
使函数写入调用方提供的现有缓冲区(例如void strdup(char *out, const char *in)
)。
使用诸如std::string
之类的C ++构造为您完成所有艰苦的工作。
当您将问题标记为“ C ++”时,我强烈建议您选择选项3。
关于c++ - 指针失败(C++),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5397543/