Q. 次のプログラムを実行:
#include
int main() {
int i;
char in[10];
fgets(in,10,stdin);
for (i=0; i<10; i++) {
printf("%x ",in[i]);
}
}
AAA [enter] と入力するとすると, たとえば
41 41 41 a 0 9 ffffff9f 2c ffffffcb 41
と表示される. これはどうして?
A. 41 は A のアスキーコード. a は 改行. fgets は改行まで読み込んだら最後に終わりの印の
0 を in[4] に書き込む.
in[5] 以降の内容はメモリの現在の状況できまり不定.
for 文では in[9] まで出力しているので, この不定の部分も出力されている.
なお char は 1 byte のデータだが printf に渡される時 int 型に変換されている.
0x80 以降はまず負の数として int に変換され, %x でint型データの内部表現が出力される.
たとえば -1 は int 型では 0xffffffff.