【发布时间】:2014-07-17 13:53:37
【问题描述】:
以下代码:
char a[] = "Apple";
char *s[] = {"Apple"};
printf("%d %d\n", sizeof(a), sizeof(s[0]));
输出是:
6 4
谁能告诉我为什么sizeof() 给出不同的输出?
编辑:我原本打算输入sizeof(),但改为输入strlen()。我为此道歉。我现在已经编辑了声明。
【问题讨论】:
-
Err... 可能是因为您使用
strlen代替s[0](不包括 0 终止符)...(不过,sizeof s[0]会给出sizeof(char *)) -
因为第二个测试的不是sizeof,而是strlen? strlen 不包括终止空字符。然而,即使它是 sizeof,它也会返回指向字符串的指针的大小。
-
@mafso 哎呀!我的错。我已经编辑了问题陈述。我确实打算只写 sizeof()。
-
参见例如here 可能还有 here。而
char *s[] = {"Apple"};(除了附加标识符)等同于char *tmp = "Apple"; char *s[] = { tmp };,而不是(你似乎假设的)char s[][6] = { "Apple" };(参见我最后评论的第二部分)。相关:c-faq.com/aryptr/index.html。最后同样重要的是:使用%zu打印size_t变量,%d用于int(并且sizeof产生一个size_t类型的对象)。 -
-1 用于更改问题!!!!