[英]How many bytes does a #define string (string literal) take?
#define STR "test1"
為什么這需要6個字節?
sizeof(STR)= 6
最后有一個尾隨'\\0'
。
它與#define
無關。 字符數組的大小相同:
const char str[] = { "test1" };
sizeof (str) == 6
這個字符串長6個字節的原因是C中的字符串有一個終止NUL字符來標記結尾。
#define
只是在編譯之前進行文本替換。
#define STR "test1"
sizeof(STR);
實際上是由編譯器看到的
sizeof("test1");
現在為什么是6而不是5? 因為字符串末尾有一個空終止符。
C中的字符串是char
的數組,具有空終止符,即它們以\\0
結尾。 常見的替代方法是Pascal樣式的字符串,其中字符串存儲沒有null終止符的char
數組,而是存儲字符串的長度。
別人怎么說...... 但是
在C
,預處理令牌不占用空間。 這取決於你如何使用它們
#define STR "test1"
char x[] = STR; /* 6 bytes */
char *y = STR; /* sizeof (char*) bytes (plus possibly 6 bytes) */
int ch = STR[3]; /* 1 byte (or sizeof (int), depending on how you look at it) */
if (ch == STR[1]) /* 1 byte (or sizeof (int) or no bytes or ...) */
printf("==>" STR "<==") /* 5 bytes ??? */
為什么這需要6個字節?
實際上,它需要(6個字節×你使用它的次數),因為它是一個預處理器宏。
請嘗試使用const char *STR = "test1"
。
最新的C編譯器有一個功能,可以猜測編寫程序的人是否處於學習階段並給出答案,使他們搜索范圍更廣,更深入,從而豐富他們的知識。
編程一段時間后,根據您的學習情況,您可能會看到值下降到5. ;-)
JK ..正如其他人所說的那樣,它最終沒有任何意義,具有諷刺意味的是需要一個字節。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.