C++ Visual Studio : Uninitialized local variable 'response' used

标签 c++ visual-studio

当我尝试运行我的代码时,出现错误 C4700,或使用了未初始化的局部变量“response”。我完全是 c++ 编码的初学者,我不明白这意味着什么。我试过添加

char* response = "yes" "no"

它运行了,但是当我输入 yes 或 no 时,我在 Project2.exe 的 0x01222C4B 处收到错误未处理的异常:0xC0000005:访问冲突写入位置 0x0122EAB4。我也不知道这是什么意思。

相关代码如下:

#include <iostream>
#include <string>
using namespace std;

int main(){


int a, b, sum;

cout << "Hey, wanna play a game?" << endl;

char* response;
cin >> response;

if (response == "no"){

    cout << "Too bad!" << endl;
}
else if (response == "yes"){

    cout << "Ok, here we go!" << endl;
}

如果您决定给出解决方案,请尝试稍微解释一下,以便我理解和学习。

谢谢。

最佳答案

替换 字符 *响应 使用字符串响应

char * 是一个带有 garbage value 的指针因为它没有用一些有效的内存初始化。 当您执行 cin >> response 时,它会尝试写入垃圾值指向的位置。这是 undefined behavior因此访问冲突。

当您使用 std::string 时相反,它确保有必要的空间和有效的内存可用。它会根据需要分配内存。这种情况如何发生的细节超出了这个答案的范围。但如果您好奇的话,这会调用 std::stringoperator >> 重载。运算符(operator)将动态分配所需的内存。

关于C++ Visual Studio : Uninitialized local variable 'response' used,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48699839/

相关文章:

c++ - 由于链式前缀,Visual Studio 2017 Linux Makefile 项目无法构建

c++ - OpenCV - FindContours - Projekt.exe 已触发断点

c++ - 与 extern "C"的 C 和 C++ 链接

c++ - 临时对象的创建是否依赖于 C++ 编译器?

c++ - 如何查找根路径名称

c# - Visual Studio 一个项目有几个 dll 作为输出?

c++ - 绘制 GL_TEXTURE_RECTANGLE 与 GL_TEXTURE_2D

c# - 构建时 T4 转换的产品仅在下一次构建中使用

c# - 在 Visual Studio 2013 中使用停靠的旧式待定更改窗口

visual-studio - 如何使 TODO 注释显示在 Visual Studio 2010 中 C++ 项目的任务列表中?