C で文字列の配列を作成しようとしています。次のコードを使用すると、
char (*a[2])[14];
a[0]="blah";
a[1]="hmm";
gcc で「警告: 互換性のないポインター型からの割り当て」というメッセージが表示されます。正しい方法は何ですか?
printf(a[1]);
編集: これを行うと、「hmm」と正しく出力されるのに、なぜコンパイラの警告が表示されるのか不思議です。
ベストアンサー1
文字列を変更したくない場合は、次のようにします。
const char *a[2];
a[0] = "blah";
a[1] = "hmm";
このようにすると、 への 2 つのポインターの配列が割り当てられます。これらのポインターは、const char
静的文字列と のアドレスに設定されます"blah"
。"hmm"
実際の文字列の内容を変更したい場合は、次のようにする必要があります。
char a[2][14];
strcpy(a[0], "blah");
strcpy(a[1], "hmm");
これにより、それぞれ 14 個の連続した配列が 2 つ割り当てられchar
、その後、静的文字列の内容がそれらの配列にコピーされます。