我的程序没有错误我只需要解释sizeof
部分如何在这里工作
#include <stdio.h>
int main(int argc, char const *argv[])
{
char food[5];
printf("Enter your favorite food:\n");
//here sizeof doubles array size why??
fgets(food, sizeof(food+1), stdin);
printf("Great choice I love %s\n", food);
return 0;
}
答案 0 :(得分:4)
sizeof
运算符产生其操作数的大小(以字节为单位),该操作数可以是表达式或类型的带括号的名称。 大小取决于操作数的类型。
表达式food + 1
的类型是指向char
的指针。因此sizeof(food+1)
将返回指针的大小。
答案 1 :(得分:1)
它不会使数组大小加倍,它会给出指针的大小。当使用数组sizeof
进行指针算术时,将参数视为指针,并给出参数类型的大小,而不是数组的大小。
由于参数是指针,因此该值等于sizeof(void *)
。
答案 2 :(得分:1)
我似乎正在阅读并发现sizeof(variable)
返回变量的大小,所以当我声明sizeof(food)
时,food
变量获取字符数组的大小然后添加一个意思是,编译器实际上通过添加一个相同大小的数组来增加变量的大小,即在内存中分配空间。
sizeof(food + 1)
分配的空间是food
的两倍。
sizeof(food)+1
分配比food
多1个字节的空间。
BTW我在Ububtu 14.04中使用gcc编译器
谢谢你们的帮助。