c语言中的sizeof算子
关于此代码,我有一个问题:c语言中的sizeof算子,c,C,关于此代码,我有一个问题: int main() { printf("%d",sizeof("")); } 它打印1,为什么?它是包含\0(Null)字符的字符串,该字符大小为1字节。“”==空字符串或以Null结尾的字符指针 由于空终止符,它打印1 i、 e “真的等于“\0””=\0(空字符)。也就是1字节。因此,它的大小为1。在C中,sizeof运算符返回以字节为单位的数据类型大小。在您的例子中,一个空的“”花费您1字节,因此它返回值1。我将作者的问题解释为为什么打印1而不是4或
int main()
{
printf("%d",sizeof(""));
}
它打印
1
,为什么?它是包含\0
(Null)字符的字符串,该字符大小为1字节。“”==空字符串或以Null结尾的字符指针
由于空终止符,它打印1
i、 e
“真的等于“\0””
=\0
(空字符)。也就是1字节。因此,它的大小为1。在C中,sizeof
运算符返回以字节为单位的数据类型大小。在您的例子中,一个空的“”花费您1字节,因此它返回值1。我将作者的问题解释为为什么打印1而不是4或8(指针大小),而不是为什么字符串的大小==连续非零字节数加1
main(){printf("%d", sizeof((const char *)""));}
上述程序的输出为8(我的机器上的指针大小)。在本例中,编译器将“”视为在如下情况下处理的对象:{const char*pointer=”“;},而不是像这样{char c[]=“”;}。(如果您熟悉x86 asm,它本质上是lea与mov)后者在堆栈上为“缓冲区”保留1个字节,初始化为“\0”。字符串文字”
的类型是char[1]
(一个元素的char
数组,NUL字节),而不是char*
/const char*
。因此sizeof
产生数组的大小,即1字节。您的程序实际上具有未定义的行为,因为%d
不是大小\u t
表达式的有效格式说明符。您应该使用%zu
或将sizeof
的结果向下转换为int
。否则,现有答案就可以了。“\0”
但是有两个空终止符,大小为2。否,“\0”!="\0". 一个是字符,另一个是字符*