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