要打印s[10]
作爲字符(%c
),以及s[10]
數值是0
,它代表了字符\0
,這意味着字符串的結束,並且沒有文本表示。出於這個原因,你沒有看到任何東西。
如果你想看到的數值,而不是字符值,使用%d
打印它作爲一個小數(整數)數量:
printf("%d\n", s[10]);
注意字符串的結尾是不一樣的結束正如你的評論之一所述。字符串結尾意味着對字符序列的任何字符串操作必須在第一個\0
到達時停止。如果字符序列在\0
之後有其他內容,則不會打印,因爲字符串操作會在第一個\0
字符上停止。
但是,行結束是一個正常字符,其視覺效果是指終端或文本編輯器在新行的行結束後打印下一個字符。
如果你想有一個完整的行尾字符的矢量(並打印出來這樣),你必須前往載體和填充:
char s[256];
int i;
for (i = 0; i < 256; ++i)
s[i] = '\n';
printf("%c\n", s[10]);
ASCII碼(十進制/數字)值行字符的結束(\n
)是12,因此,下面的片段將相當於:
char s[256];
int i;
for (i = 0; i < 256; ++i)
s[i] = 12;
printf("%c\n", s[10]);
這並不然而工作(它不打印一個新行):
char s[256] = {'\n'}; // or {12};
printf("%c\n", s[10]);
由於{'\n'}
效果是分配\n
到所述陣列的所述第一元件和陣列的類型,您在製作(char[]
,int[]
或任何)其中remainings 255字符填充有值0,不管。如果你寫一對空括號{}
,所有的元素將是0
因此,這兩個語句是等價的:
char s[256] = {}; // Implicit filling to 0.
char s[256] = {0}; // Implicit filling to 0 from the second element.
然而,如果沒有定義數組:
char s[256];
該數組未填充(未初始化),因此,s
的每個元素都將包含任何內容,直到您使用值填充爲止,例如for
。
我希望所有這些例子都能得到全貌。
你期望它打印什麼? –
它打印一個文字零,所以'printf'認爲它完成了,因爲它標記了一個字符串的末尾。 – usr2564301
我的不好,搞錯了:) @SouravGhosh –