任何人都可以解释为什么这段代码:
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
感谢的
答案 0 :(得分:1)
strlen
期望得到(指向a) C string 的指针。 C字符串是char
的数组,以空字符'\0'
结尾。
当你memset
个char
数组时,你只需要在每个元素中写一个'B'
,因此这些数组都不是C字符串。将它们传递给strlen
是未定义的行为。
为了解决这个问题,请相应地设置每个数组的最后一个元素:
t1[19] = '\0';
t2[19] = '\0';