4

次のコード セグメントを検討してください。

char message[255];
char newMessage[255];
int i;
for (i = 0 ; i < 255 ; i++)
     message[i] = i;
newMessage = message;

これを行おうとすると、最後の行でエラーが発生します。

incompatible types when assigning to type ‘char[255]’ from type ‘char *

配列が同じタイプの場合、なぜそれが得られるのですか? どうすれば修正できますか?

前もって感謝します

4

5 に答える 5

5

配列を割り当てることはできません。を使用memcpy()して、ある配列の内容を別の配列にコピーできます。

于 2012-05-16T20:04:17.540 に答える
4

newMessageこれを修正する 1 つの方法は、ポインターとして宣言することです: char* newMessage.

もう 1 つは、memcpy()-- またはstrncpy()ifが文字列の場合 -- を使用して、 の内容をmessageにコピーすることです。messagenewMessage

どちらの方法が好ましいかは、次に何を行うかによって異なりますnewMessage

于 2012-05-16T20:03:58.193 に答える
2

配列は同じ型として宣言されていますが、いずれかを使用しようとするとすぐに最初の要素へのポインターに変わるため、別の配列への代入には使用できません。

memcpyまたは、配列が構造体の一部である場合は、配列を明示的にコピーでき、構造体の一部としてコピーされます。

于 2012-05-16T20:06:17.490 に答える
2

の各要素をループしてmessage、値を に割り当てる必要がありますnewMessage。(またはmemcpy()、他の人が提案したように使用してください。)

エラーは、あなたがやろうとしていることの文脈では偶発的なものです。

于 2012-05-16T20:06:36.323 に答える
0

上記の方法で、配列の内容をある配列から別の配列にコピーすることはできません。

int arr[2] これは 2 つの整数の配列でarr[0]、最初の整数とarr[1]2 番目の整数です。しかし。arr配列の 0 番目の要素のアドレス (不変) です。

そのためnewMessage = message;、配列内の要素ではなく、アドレスをコピーしていませんでしたmessage。配列はメモリへの定数ポインタであるため、これは違法です。変更することはできません。

文字配列なので。使用をコピーするstrcpystrncpy、2つの説明についてはmanページを参照してください:)

于 2012-05-20T15:50:44.320 に答える