11

私は文字列を扱っています。

次のプログラムを実行するたびに、行のc*で文字列定数から 'char ' への非推奨の変換としてエラーが発生しますchar *p = "hello"

私は何を間違っていますか?

このエラーはどういう意味ですか?どうすれば修正できますか?

私のコードは次のとおりです。

#include<stdio.h>
int main()
{
    char *p = "hello";
    printf("%s",p+1);
    return 0;
}
4

2 に答える 2

18

これは警告であるはずです (警告をエラーとして扱うようにコンパイラを設定している場合もありますが、これは多くの場合良い考えです)。

あなたが望むのは:char const *p = "hello";代わりに。

文字列リテラルを変更しようとすると、未定義の動作が発生します。これconstにより、誤ってそれを行うことがなくなります (つまり、constキャストなどで修飾子を削除しない限り、ポインターを介して書き込もうとするコードはコンパイルされません)。

于 2013-05-27T05:53:12.653 に答える
5

「Hello」文字列は定数であり、それを非 const char* に格納しようとしているため、これは警告です。問題を解決するには

const char* p = "Hello"またchar[] p = "Hello"

于 2013-05-27T05:58:55.117 に答える