指针失败(C++)

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'的地址",当我运行程序时,它返回内存地址.

Oli*_*rth 8

char dup[strlen(s)]定义一个本地堆栈变量; 当函数结束时,这超出了范围,因此在此之后访问它的任何尝试都将导致未定义的行为.

你的选择是:

  1. 使用堆变量(使用获得new).你必须delete在某个时候记住它.
  2. 让函数写入调用者提供的现有缓冲区(例如void strdup(char *out, const char *in)).
  3. 使用类似的C++结构std::string,为您完成所有艰苦的工作.

正如您已将问题标记为"C++",我强烈推荐选项#3.