1

char label[10] = "Me"の値を変更するにはlabel、次のようにする必要があります。

char * temp = "Not Me";
strcpy(label,temp);

私の質問は、なぜこれが無効なのですか?

char label[] = "Me";
label = "Not me";
4

3 に答える 3

0

ラベルlabel="Not Me"のタイプがchar *. 配列として定義しました。配列とポインターは意味的に同等です。ポインターはアドレスであるため、基本的にポインターのタイプを持つintものにようなものを割り当てることは意味がありません。"Not Me"

あなたがする必要があるのは、ポインターを逆参照し、ポイントされている場所に値を割り当てることです。タイプは であるため、char *各場所を逆参照し、各場所に文字を割り当てる必要があります。

例えば

label[0] = 'N';
label[1] = 'o';
...

または、同等の for ループを使用します。

于 2013-05-09T20:47:36.550 に答える
-2

C では、配列ラベルは基本的にポインター ラベルと同じですが、配列が定義されたときにその背後に割り当てられたメモリが自動的に取得される点が異なります。

それ以外の場合、配列ラベルとポインター ラベルは同じものとして扱われます。したがってlabel、配列として宣言したとしても、(その後に中括弧を付けずに) 直接操作するlabel場合は、それをポインター (たまたま最初の配列要素を指す) として扱っています。同様に、labelポインタとして宣言して を操作するlabel[x]場合は、(別名: ) を指してxいる場所を過ぎた th 番目のデータ項目を操作していることになります。label*(label + x)

あなたの最初の本能は、狂ったように危険に見えるかもしれません。あなたは正しいでしょう。この言語が設計されたのは 60 年代後半から 70 年代前半にさかのぼり、当時の小さなマシンでコンパイラを簡単に実装できるようにすることが、言語がエラーを起こしやすいことよりもはるかに重要でした。

于 2013-05-09T20:50:06.457 に答える