1

私はプログラマーの初心者です。一部のスクリプトを配列から別のスクリプトにコピーできない理由がわかりません。

char array1[11];
char array2[2];
array1 = {'255 105 85'};
array2[0] = array1[0];
array2[1] = array1[1];
array2[2] = array1[2];

MessageBox(hwnd,array2,"mes",NULL);

「255」ではなく「5」になりました。私はGCCコンパイラでcode::blocksを使用しています。プロジェクトはwin32フレームベースで作成されました。誰かが問題の原因を知っていますか?

4

2 に答える 2

1

次の構文は C では許可されていません。

array1 = {'255 105 85'};

代わりに、次のような静的配列の初期化を使用することを検討してください。

char array1[11] = {255, 105, 85};

これにより、array1 に指定された 3 つの値が入力され、他のすべての要素は 0 に設定されたままになります (つまり、インデックス 3 で始まりインデックス 10 で終わる要素)。

あなたの場合、コンパイラが構文エラーを発行しなかった理由はかなり驚くべきことです

更新: この array1[2] のような式がある場合、個々の文字を操作していることにも注意してください。文字列を操作したい場合 (つまり、指定した数値に対して 3 つの別個の文字列を使用する場合)、次のように宣言する必要があります。

   char *array1[3] = {
         "255",
         "105",
         "85"
   };

   char *array2[3];

   array2[0] = array1[0];
   array2[1] = array1[1];
   array2[2] = array1[2];

したがって、文字列の配列が得られます。array1 の各エントリには、文字列「255」が配置されているメモリのポインタ (アドレス) が含まれます (「255」は、「2」、「5」、「5」、「\0」の 4 文字で構成される配列であることに注意してください) ')。

于 2012-07-27T19:54:37.560 に答える
0

Array1は次のように宣言する必要があります。

char array1[] = {0x255, 0x105, 0x85};

'a'一重引用符は、または'6'またはのように、ASCIIの単一文字を表し'!'ます。

また、array2の長さは2ですが、3番目の値(array2[2])に値を割り当てています。これはおそらくエラーです。

于 2012-07-27T19:52:01.183 に答える