我測試了相同的字符串內容「abc」使用sizeof()。我的職責是這樣的:C:不同的字符串定義,我得到不同的大小使用sizeof()
int main(void){
char* pass1 = "abc";
char pass2[] = "abc";
char pass3[4] = "abc";
char pass4[] = "";
scanf("%s", pass4);
printf("sizeof(pass1) is: %lu\n", sizeof(pass1));
printf("sizeof(pass2) is: %lu\n", sizeof(pass2));
printf("sizeof(pass3) is: %lu\n", sizeof(pass3));
printf("sizeof(pass4) is: %lu\n", sizeof(pass4));
return 0;
}
我輸入 「ABC」 爲PASS4,輸出是這樣的:
sizeof(pass1) is: 8
sizeof(pass2) is: 4
sizeof(pass3) is: 4
sizeof(pass4) is: 1
我期待所有的4S。我認爲上面的4個字符串定義是相同的。
爲什麼sizeof(pass1)返回8?爲什麼sizeof(pass4)是1?
'sizeof'產生'size_t'類型的結果。 'size_t'的正確格式是'「%zu」'。 –
這是數組不是指針的時代之一......它們在傳遞給函數時會轉移到指針,但是會丟失這個大小的信息......實際上,一個常見的範例使用它來查找數組中的元素數... –
[要打印'size_t'使用%zu](http://stackoverflow.com/q/940087/995714)。使用錯誤的格式說明符調用未定義的行爲 –