为什么这两个看似相同的声明导致不同的字符串长度?

时间:2016-05-14 20:14:42

标签: c initialization declaration string-length

任何人都可以解释为什么这段代码:

char    t1[20];
char    t2[20];

memset(t1, 'B', sizeof(t1));
memset(t2, 'B', sizeof(t2));
printf("%lu\n", strlen(t1));
printf("%lu\n", strlen(t2));

结果:

22
21

感谢的

1 个答案:

答案 0 :(得分:1)

strlen期望得到(指向a) C string 的指针。 C字符串是char 的数组,以空字符'\0' 结尾。

当你memsetchar数组时,你只需要在每个元素中写一个'B',因此这些数组都不是C字符串。将它们传递给strlen是未定义的行为。

为了解决这个问题,请相应地设置每个数组的最后一个元素:

t1[19] = '\0';
t2[19] = '\0';