0 c++ memory pointers memory-address
可能重复:
c ++警告:局部变量的地址
char* strdup(const char* s)
{
char dup[strlen(s)];
for (int i = 0; i<strlen(s); i++)
{
dup[i]=s[i];
}
return dup;
}
Run Code Online (Sandbox Code Playgroud)
该函数应该保存已向后读取的新数组和另一个插槽.当我编译它时,我收到错误"警告:返回本地变量'dup'的地址",当我运行程序时,它返回内存地址.
char dup[strlen(s)]定义一个本地堆栈变量; 当函数结束时,这超出了范围,因此在此之后访问它的任何尝试都将导致未定义的行为.
你的选择是:
new).你必须delete在某个时候记住它.void strdup(char *out, const char *in)).std::string,为您完成所有艰苦的工作.正如您已将问题标记为"C++",我强烈推荐选项#3.