繁体   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