0

int のメモリ値を char バッファにコピーしようとしています。コードは次のようになります。

#define CPYINT(a, b) memcpy(a, &b, 4)
............

char str1[4];
int i = 1;
CPYINT(str1, i);
printf("%s",s);

...........

str1 を印刷すると空白になります。どうか明らかにしてください。

4

4 に答える 4

7

整数のバイト表現を char 配列にコピーしています。次に、printfこの配列をヌル終端文字列として解釈するように要求します。str1[0]ゼロの場合、基本的に空の文字列を出力しています (ここではエンディアンの話はスキップします)。

何を期待していましたか?明らかに、整数のテキスト表現を出力したい場合はi、 を使用する必要がありますprintf("%d", i)

于 2010-11-17T08:10:56.000 に答える
2

試す

printf("%02X %02X %02X %02X\n", str1[0], str1[1], str1[2], str1[3]);

代わりは。

整数 1 のバイナリ表現には、おそらく先頭の NUL が含まれているため、現在の printf ステートメントは必要以上に早く終了します。

于 2010-11-17T08:36:46.640 に答える
1

ここであなたの意図は何ですか?現在、任意のバイト値を char 配列に入れていますが、それらを文字列として解釈しています。最初のバイトはおそらくゼロ (null) であるため、何も出力されませんが、おそらく文字の多くは印刷できないため、コピーが機能したかどうかを確認するために printf を使用するのは不適切なツールです。

したがって、配列をループして各バイトの数値を出力します。そのために %0xd が役立つ場合があります。または、意図が実際に int の文字列表現を作成することである場合は、より大きなバッファーとそのためのスペースが必要になります。 null ターミネータ。

于 2010-11-17T08:17:43.370 に答える
0

tou が itoa 関数 のリンク テキストを使用できるように、intger を char* に変換する必要があるかもしれません

于 2010-11-17T08:14:42.937 に答える