私は文字列を扱っています。
次のプログラムを実行するたびに、行のc*で文字列定数から 'char ' への非推奨の変換としてエラーが発生しますchar *p = "hello"
私は何を間違っていますか?
このエラーはどういう意味ですか?どうすれば修正できますか?
私のコードは次のとおりです。
#include<stdio.h>
int main()
{
char *p = "hello";
printf("%s",p+1);
return 0;
}
私は文字列を扱っています。
次のプログラムを実行するたびに、行のc*で文字列定数から 'char ' への非推奨の変換としてエラーが発生しますchar *p = "hello"
私は何を間違っていますか?
このエラーはどういう意味ですか?どうすれば修正できますか?
私のコードは次のとおりです。
#include<stdio.h>
int main()
{
char *p = "hello";
printf("%s",p+1);
return 0;
}
これは警告であるはずです (警告をエラーとして扱うようにコンパイラを設定している場合もありますが、これは多くの場合良い考えです)。
あなたが望むのは:char const *p = "hello";
代わりに。
文字列リテラルを変更しようとすると、未定義の動作が発生します。これconst
により、誤ってそれを行うことがなくなります (つまり、const
キャストなどで修飾子を削除しない限り、ポインターを介して書き込もうとするコードはコンパイルされません)。
「Hello」文字列は定数であり、それを非 const char* に格納しようとしているため、これは警告です。問題を解決するには
const char* p = "Hello"
またchar[] p = "Hello"