为什么没有 '\0' 的 strlen 工作正常?

Why is strlen working fine without '\0'?

如标题,我对在 c 中使用 char* 有一些疑问。例如,如果我写这个

char *a = calloc(5, 5);
a[0] = '1';
a[1] = '1';
a[2] = '1';
a[3] = '1';
a[4] = '1';
printf("a = %s, length = %d", a, strlen(a));

输出为

a = 11111, length = 5

为什么没有 '\0' 的 strlen 工作正常?有人可以帮我理解吗?

calloc(5, 5) 分配并清零 25 个字节。您分配了其中的前五个,但第六个仍然是 '[=11=]'