当我尝试运行我的代码时,出现错误 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::string
的 operator >>
重载。运算符(operator)将动态分配所需的内存。
关于C++ Visual Studio : Uninitialized local variable 'response' used,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48699839/