我做了一个简单的程序,我在其中执行一个带有用户输入参数的程序,但每当我运行它时,它都会给我错误
"Unhandled exception at 0x00f138b7 in SZP_Client.exe: 0xC0000005: Access violation writing location 0x0000000a."
我的代码是
char* command_text;
cout << "Enter SERVER IP Address without Port ";
cin >> command_text;
char* command_str = strdup("PServLib.exe \"127.0.0.1\" \"30760\" ");
string command_string_out_final= command_str;
command_string_out_final.append(command_text);
command_string_out_final = command_string_out_final + " \"3627\"";
system(command_string_out_final.c_str());
为什么我的代码会引发访问冲突,我该如何解决?
答案 0 :(得分:8)
罪魁祸首是cin >> command_text
。当写入char*
时,它假定这是一个足够大的char数组,用于保存正在写入的值。相反,它是一个未初始化的char*
,所以你写入任意记忆。
最简单的解决方法是将command_text
更改为std::string
。
答案 1 :(得分:4)
char* command_text;
cout << "Enter SERVER IP Address without Port ";
cin >> command_text;
command_text
是一个未初始化的指针。为什么要在代码中混用char*
和std::string
?只需在任何地方使用std::string
。
答案 2 :(得分:4)
char* command_text;
cin >> command_text;
这是读取没有为其分配空间的C样式字符串。
使用C ++字符串
会更好std::string command_text;
cin >> command_text;
根据需要分配空间来存储输入。
答案 3 :(得分:3)
你可能想要
string command_text;
而不是char *
。 cin
会尝试将其输出放入string
,而不是char*
。