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

时间:2010-09-30 22:27:33

标签: c++ c variables

#define STR "test1"

为什么这需要6个字节?

sizeof(STR)= 6

7 个答案:

答案 0 :(得分:16)

最后有一个尾随'\0'

答案 1 :(得分:5)

它与#define无关。字符数组的大小相同:

const char str[] = { "test1" };
sizeof (str) == 6

此字符串长度为6个字节的原因是C中的字符串具有终止NUL字符以标记结尾。

答案 2 :(得分:5)

#define只是在编译之前进行文本替换。

#define STR "test1"
sizeof(STR);

实际上被编译器视为

sizeof("test1");

现在为什么是6而不是5?因为字符串末尾有一个空终止符。

答案 3 :(得分:2)

C中的字符串是char s的数组,带有空终止符,即它们以\0结尾。常见的替代方法是Pascal样式的字符串,其中字符串存储没有null终止符的char s数组,而是存储字符串的长度。

答案 4 :(得分:1)

其他人说的话...... 但是

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 ??? */

答案 5 :(得分:1)

  

为什么这需要6个字节?

实际上,它需要(6个字节×你使用它的次数),因为它是一个预处理器宏。

请尝试const char *STR = "test1"

答案 6 :(得分:0)

最新的C编译器有一个功能,可以猜测编写程序的人是否处于学习阶段并给出答案,使他们搜索范围更广,更深入,从而丰富他们的知识。

编程一段时间后,根据您的学习情况,您可能会看到值下降到5.; - )

JK ..正如其他人所说的那样,它最终没有任何意义,具有讽刺意味的是需要一个字节。