1

重複の可能性:
文字列定数から char * エラーへの非推奨の変換

UDP ソケット経由で通信しようとしている C/C++ でプログラムを書いています。

私が取り組んでいるコードには変数がありchar *servIP、これは入力パラメーターを介してメイン関数に設定されます。ただし、入力パラメーターをオプションにしたいので、コードは次のとおりです。

if(argc > 1)
    servIP = argv[1];           /* First arg: server IP address (dotted quad) */
else
    servIP = "127.0.0.1";

servIP後で、よりネットワークで使用可能な形式に変換されます。

これをコンパイルすると、「警告: 文字列定数から char* への非推奨の変換です」という警告が表示されます。

これはその IP アドレスを入力する正しい方法ではないと思います。より良い方法は何ですか?

4

1 に答える 1

4

or の代わりにservIPa として宣言します。それが不可能な場合は、 (2 番目のケースでは、後で覚えておいてください)const char *char *strdup("127.0.0.1")free

文字列リテラルを変更した場合の効果は定義されていません。これが、c++ が「n const char の配列」型を文字列リテラルに割り当てる理由です。コンパイラは、const データ型から非 const データ型への変換について警告しています。

代わりに使用できstd::string、基になる文字への C スタイルのポインターが必要な場合は、std::string::c_str()を使用できます。

于 2012-10-14T01:26:32.593 に答える