【发布时间】:2015-08-17 13:56:28
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
char qq[] = {'a' , 'b' , 'c' , 'd'};
char qqq[] = "abcd";
printf("%d\n" , sizeof qq / sizeof qq[0]); // line A
printf("%d\n" , strlen(qq)); // line B
printf("%d\n" , sizeof qqq / sizeof qqq[0]); // line C
printf("%d\n" , strlen(qqq)); // line D
system("pause");
return 0;
}
看看上面的代码。数组qq 有四个元素,数组qqq 有五个元素,最后一个是'\0'。所以我理解A行打印4和C行打印5。 D线对我来说没问题。我知道在处理字符串时strlen(qqq) 等于"sizeof qqq / sizeof qqq[0] - 1"。但是 B 行打印 15 这让我很困惑。为什么? (我用的是vs2012。)
【问题讨论】:
-
注意:
strlen()返回size_t,所以你应该使用%zu格式说明符。 -
同样的事情 sizeof 运算符使用 s%zu 而不是 %d 或 %ld 因为 long unsigned int
-
它可以打印任何东西。
strlen()会很高兴地继续在内存中移动,直到找到一个 0。它恰好在 15 个字节中找到一个。