重複の可能性:それは
Incompatible types in assignment
を言ってコンパイルされませんCの文字列配列char result[3][4]; result[0] = "horse"; result[1] = "pig"; result[2] = "chicken";
:
string literal in c
Assigning strings to arrays of characters
私は、次のコードを得ました。私は間違って何をしていますか?
重複の可能性:それは
Incompatible types in assignment
を言ってコンパイルされませんCの文字列配列char result[3][4]; result[0] = "horse"; result[1] = "pig"; result[2] = "chicken";
:
string literal in c
Assigning strings to arrays of characters
私は、次のコードを得ました。私は間違って何をしていますか?
charは単一の文字です(例: 'h')
文字列ポインタが必要です。
char *result[3];
あなたはそれを使用すると、個々の文字列の内容を変更することはできません。この方法で(それは定数と別の場所に保存されている。)
を行う場合にも何かができる忘れないでくださいこの
char *result[3];
result[0] = malloc(100 * sizeof(char));
strcpy(result[0],"horse"); // or strncpy(result[0],5,"horse")
etc
のようにあなたは、おそらくたかった:
char* result[3];
result[0] = "horse";
result[1] = "pig";
result[2] = "chicken";
あなたは2のために間違っていたやりました理由。
まず、そのような文字配列に文字列を割り当てることはできません。たとえば、strcpy
を使用する必要があります。
第二には、ご使用のアレイの寸法も間違っていた、char array[4]
は明らかに"horse"
または"chicken"
を保持していますので、あなたは、私はそれをコンパイルします(上記の言ったことを修正した場合にそれも動作しないだろうが、あなたは、メモリへの書き込みをされるだろうあなた書くべきではない)。
char配列自体を格納する代わりに、訂正されたコードが行うもので、"horse"
などが格納されているメモリ内の場所へのポインタを格納します。したがって、アドレスを保存するだけで、=
演算子を使用することができます。
配列は変更不可能ですlvalues
つまり、配列に割り当てることはできません。
ポインタの配列を使用する必要があります。 strcpy()
をあなたは言葉のサイズを大きくする必要がchar result[3][4];
に変更して使用します。
char result[3][8]; // at least 8!
strcpy(result[0], "horse");
strcpy(result[1], "pig");
strcpy(result[2], "chicken");
char result[3][10] = {
"horse",
"pig",
"chicken",
}
または
がchar result[3][10];
strcpy_s(result[0], 10, "horse");
strcpy_s(result[1], 10, "pig");
strcpy_s(result[2], 10, "chicken");
あなたはリテラル文字列を割り当てることができます(例:"horse"
を) char
配列に宣言したときにのみ配列を返します。
char result[3][4] = { "horse", "pig", "chicken" };
が、警告:あなたはこのように行うことができ
char array[4] = "str"; // is OK
char array2[4];
array2 = "str"; // is NOT OK.
"horse"
と"chicken"
はchar[4]
より長いです。
あなたはすでに宣言char
配列に文字列リテラルを割り当てたい場合は、strcpy
(または他の同様の機能)を使用する必要があります。
の多くによって提案された他の解決策は、char型のポインタの配列としてresult
を宣言することです:char *result[3];
、しかし、あなたはこのように行う場合は、result[i]
が指す文字列の内容を変更することはできません。
次のように動作します。 char result [3] [10] = {"horse"、 "pig"、 "chicken"};
また、「chicken」と「horse」には4文字以上の文字が含まれているため、結果[3] [4]([4]部分)は正しくありません。
result
がchar result[3][4]
として宣言し、と似たようなになりますresult[0]
として使用するので、これは動作しません:char * const result
。定数ポインタは割り当てを許可しません。すでに列の配列へのポインタ "[4]
"を含んでいます。
これらはchar *でありchar [4]ではありません... – leppie
@birryree:その質問には独自の重複がありますhttp://stackoverflow.com/questions/579734/assigning-strings-to-arrays-of- character –