0

我制作了一个简单的程序,在其中我使用用户输入的参数执行程序,但是每当我运行它时,它都会给我错误

        "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());

为什么我的代码会引发访问冲突,我该如何解决?

4

4 回答 4

7

罪魁祸首是cin >> command_text。当写入 achar*时,它假定这是一个足够大的 char 数组来保存正在写入的值。相反,它是一个未初始化的char*,因此您正在写入任意内存。

最简单的解决方法是更改command_text​​为std::string.

于 2013-02-27T22:36:05.737 回答
4
char* command_text;
cout << "Enter SERVER IP Address without Port ";
cin >> command_text;

command_text是一个未初始化的指针。你为什么在你的代码中混合char*std::stringstd::string随处使用。

于 2013-02-27T22:36:18.163 回答
4
char* command_text;

cin >> command_text;

这是读入没有为其分配空间的 C 样式字符串。

使用 C++ 字符串会更好

std::string command_text;
cin >> command_text;

它根据需要分配空间来存储输入。

于 2013-02-27T22:38:42.140 回答
3

你可能想要

        string command_text;

而不是一个char *. cin将尝试将其输出放入 a string,而不是 a char*

于 2013-02-27T22:37:51.480 回答