在C++中传递C-Strings的问题

Nic*_*tch 2 c++ string

我不是C++开发人员,我想弄清楚为什么当我从一个函数返回一个C字符串时,我会得到垃圾.

#include <stdio.h>

const char* tinker(const char* foo);

int main(void)
{
    const char* foo = "foo";
    foo= tinker(foo);
    printf(foo); // Prints garbage
    return 0;
}

const char* tinker(const char* foo)
{
    std::string bar(foo);
    printf(bar.c_str());  // Prints correctly
    return bar.c_str();
}
Run Code Online (Sandbox Code Playgroud)

Ree*_*sey 8

你正在返回一个基于a的内部存储器的C字符串std::string.但是,这是在您bar被破坏后打印的.到达printf(foo);线路时,这个内存是垃圾.