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。a に書き込むとき、char*これは、書き込まれる値を保持するのに十分な大きさの 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::string使用するだけです。std::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に入れようとします。stringchar*

于 2013-02-27T22:37:51.480 に答える