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/

10-15 06:59