[英]sizeof operator in c
我對此代碼有疑問:
int main()
{
printf("%d",sizeof(""));
}
它打印1
,為什么?
它是包含\0
(Null) 字符的字符串,其大小為1 Byte
。
""
= \0
(空字符)。 這是1個字節。 因此它的大小為 1。
我將作者的問題解釋為為什么打印 1 而不是 4 或 8(指針大小),而不是為什么字符串的大小 == 連續非零字節數加 1。
main(){printf("%d", sizeof((const char *)""));}
上述程序的output是8(我機器上的指針大小)。 在這種情況下,編譯器將 "" 視為在以下情況下的處理: { const char *pointer = ""; },不像這樣 { char c[] = ""; }。 (如果您熟悉 x86 asm,它本質上是 lea 與 mov)后者在堆棧上為“緩沖區”保留 1 個字節,初始化為 '\0'。
字符串文字""
是char[1]
類型(一個元素的char
數組,NUL 字節),而不是char*
/ const char*
。 因此sizeof
產生數組的大小,即 1 個字節。
"" == 空字符串或 null 終止的指向字符的指針。
由於 null 終止符,它打印 1。
IE
"" 真的等於 '\0'
在 C 中, sizeof
運算符以字節數返回數據類型的大小。 在您的情況下,一個空的 "" 花費您 1 個字節,因此它返回值 1。
您的程序實際上具有未定義的行為,因為%d
不是size_t
表達式的有效格式說明符。 您應該使用%zu
或者將sizeof
的結果轉換為int
。 否則,現有的答案是可以的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.