c++ - 使用 const 指针的 C 风格字符返回不正确的结果

标签 c++

<分区>

Possible Duplicate:
Can a local variable’s memory be accessed outside its scope?

我已经使用指针声明了一个 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;
}

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

也许值得一提的是,对于长度为 4,5 的 str I 字符串。尽管 str 的长度不是 19。

最佳答案

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

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

char* string = new char[20];

记得之后删除[]它。

关于c++ - 使用 const 指针的 C 风格字符返回不正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12758105/

相关文章:

c++ - UMDF,无法为 Microsoft 定义的类指定 [ClassInstall32] 部分

c++ - 基类中 boost::shared_ptr 指向的对象永远不会被销毁

c++ - 关闭所有进程

c++ - 单元测试 : static create method

c++ - C++ Lambda捕获此vs通过引用捕获

c++ - C++ 模块系统中如何处理模板?

python - 使用 C++,如何在 Qt Designer 中运行 python 文件?

c++ - 如何丢弃使用 boost::asio 发送的数据?

c++ - 成员和指针

c++ - 哪种智能指针类型?