使用const指针的C样式字符返回不正确的结果

CjC*_*oax 0 c++

可能重复:
可以在其范围之外访问局部变量的内存吗?

我已经使用指针声明了一个C样式数组,并为它赋值一个函数返回的值.

1.const char* str = chArr->readString();

就在上面之后,我想以如下方式讨论str:

2.cout << "pointer to char is = " << str <<endl;

而且readString是:

char* CharArray::readString()
{
    std::cout << "Insert a string of max 19 length:" <<std::endl;
    char string[20];
    std::cin.getline(string,20,'\n');
    return string;
}
Run Code Online (Sandbox Code Playgroud)

当我在第2行放置一个断点时,我可以看到正确的结果作为值str.但是控制台窗口什么都没有显示,在通过第2步之后,当我查看该str值时,它显示的内容类似于" P÷7"或" äû:",...

也许值得一提的是,对于str我来说,长度为4,5.尽管str的长度不是19.

Ben*_*ijl 5

您正在返回指向局部变量的指针.在函数结束后,系统将再次使用此变量的内存地址.所以有些其他代码可能会用一些随机数据覆盖它,这就是你看到乱码的原因.

为了安全地执行此操作,请使用:

char* string = new char[20];

delete []之后请记住.