期待什麼字符代碼1-5是不可打印的控制字符, Control-A至Control-E。
以下代碼:
#include <stdio.h>
int main(void)
{
char arr[5];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
arr[3] = 4;
arr[4] = 5;
for (int i = 0; i < 5; i++)
printf("%c\n", arr[i]);
return 0;
}
可編譯成程序ccc
,然後運行:
$ ccc
$ ccc | odx
0x0000: 01 0A 02 0A 03 0A 04 0A 05 0A ..........
0x000A:
$ ccc | od -c | so
0000000 001 \n 002 \n 003 \n 004 \n 005 \n
0000012
$ ccc | sed l
\001$
\002$
\003$
\004$
\005$
$
雖然有值1-5沒有可見字符(控制字符在終端上沒有可見的表示),十六進制轉儲程序(odx
,自制程序),od -c
和sed l
都可以看到輸出中的控制字符。
如果要查看數字'1'
至'5'
,請使用單引號字符常量代替(未加引號)的數字。
順便提及,在呼叫:
printf("%c\n", arr[0]);
printf("%d\n", arr[0]);
arr[0]
自動地被調用可變參數(變量參數列表)的標準規則功能如printf()
晉升爲int
。所有參數類型爲char
(包括有符號和無符號變量)和short
在自變量列表的變量部分都自動提升爲int
,並且float
類型的任何值都被提升爲double
。(可以想象,unsigned short
可能會被提升爲unsigned int
,如果普通int
無法存儲最大值unsigned short
,但這意味着sizeof(short) == sizeof(int)
因此促銷無論如何都是無效的。現在我已經覆蓋了我的屁股,您可以忘掉它。)格式字符串中的轉換規範控制如何向用戶呈現值int
。
http://en.wikipedia.org/wiki/ASCII – juanchopanza 2014-09-02 15:34:50
它可能打印ASCII字符SOH,它沒有可見的等效物 – Brian 2014-09-02 15:35:14
您正在通過控制-E打印控制-A。你可以通過運行'od -c'或者'sed l'或者其他類似的東西來看到輸出,讓不可見的字符可見。 – 2014-09-02 15:40:56