void main()
{
char s[]="\12345s\n";
printf("%d",sizeof(s));
}
的工作當我編譯它,它給6.我不是佔有,爲什麼它給6 insted的8。 像{'\1','2','3','4','5','s','\n'}
SizeOf函數返回的字符數組
請有誰能夠告訴其原因,我想要一些深刻而清晰的解釋。我會感謝他們。
void main()
{
char s[]="\12345s\n";
printf("%d",sizeof(s));
}
的工作當我編譯它,它給6.我不是佔有,爲什麼它給6 insted的8。 像{'\1','2','3','4','5','s','\n'}
SizeOf函數返回的字符數組
請有誰能夠告訴其原因,我想要一些深刻而清晰的解釋。我會感謝他們。
因爲\123
被認爲是一個字符,所以它是一個轉義序列(八進制)。所以sizeof
計算5個字符'\123'
,'4'
,'5'
,'s'
,'\n'
和結尾'\0'
。
不會給它4無論如何它的思考指針不管字符串是什麼? – Dineshkumar
@Dineshkumar char *和char []之間有區別,這裏's'是一個數組,所以'sizeof'返回數組的大小。在陣列衰減成指針的情況下,例如,傳遞給函數'foo(char * p)'sizeof'將返回4(或指針通常具有的任何大小 - 取決於操作系統) –
char s[]="\12345s\n"
等於:
char s[] = { '\123', '4', '5', 's', '\n', 0 }
所以六個總元件。
char s[]="\12345s\n";
\
表示轉義序列 如果號碼用於高達3個地方,缺省爲八進制。 所以\ 123將在八進制作爲 進行評估 - > 8 * 8 * 1 + 8 * 2 + 3 = 83 所以如果打印這個你會發現它 S45s 爲S - >對應的ASCII碼的83 因此,大小也是4.
嘗試打印's',然後你應該看看發生了什麼。 –
在printf調用中有UB:格式指定了一個int,但sizeof提供了一個size_t。 – pmg
[sizeof數組和指針]可能的重複(http://stackoverflow.com/questions/13672162/sizeof-array-and-pointers) –