簡體   English   中英

#define字符串(字符串文字)占用多少字節?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM