長(zhǎng)度跟字符N的關(guān)系
在用第2中格式定義字符串 char 字符竄名稱(chēng)[長(zhǎng)度m]={'字符1'',字符2','...','字符n','\0'} 中
字符串的長(zhǎng)度m 跟 字符n 的關(guān)系是什么 是m=n? m=n+1? ?還是m>n?
還有下面這段代碼為何運(yùn)行結(jié)果是 bcef?
#include?<stdio.h> int?main() { ????char?s1[4]={'ab','c','de','f','gh','\0'}; ????printf("%s\n",s1); ????return?0;???? }
2015-10-15
這個(gè)代碼中有很多不正確或不規(guī)范的地方。
你在定義s1數(shù)組時(shí)指定了數(shù)組大小為4,但卻用一個(gè)超過(guò)4個(gè)元素的列表去初始化它。在編譯時(shí)會(huì)有警告的。
單引號(hào)用來(lái)表示單個(gè)字符,應(yīng)該括起單個(gè)字符。 不過(guò)C也確實(shí)允許括起多個(gè)字符,這特性叫multi-character,然而C標(biāo)準(zhǔn)對(duì)多個(gè)字符在內(nèi)存中如何存儲(chǔ)沒(méi)有規(guī)定。
gcc在小端機(jī)器上好象是把最后一個(gè)字符放到低地址位上,這樣一來(lái)用 'ab' 給數(shù)組元素初始化時(shí),數(shù)組中的元素得到的是 'b' 這個(gè)字符。所以數(shù)組得到的前4個(gè)字符為 b c e f,后面有留空,這空白在printf中被當(dāng)作了'\0',作為字符床的結(jié)尾,所以最后會(huì)輸出bcef。
在實(shí)際寫(xiě)代碼時(shí)千萬(wàn)不要這樣寫(xiě)!