完全填充数组的长度

Length of a fully filled array

#include <stdio.h>
#include <string.h>    
int main(void)    
{
    char cp [5];
    cp[0]=1;
    cp[1]=1;
    cp[2]=1;
    cp[3]=1;
    cp[4]=1;
    printf("%lu\n", strlen(cp));
}

如果我运行这个程序,它显示8.(错误) 但是,如果我将数组更改为超过 [5](例如:[6] 或 [7]...)且数组元素数量相同,它会显示 5(右)。

strlen return 从您放弃的指针到空字符(不算数)的字符数,在您的情况下,您没有放入空字符你的数组,所以 strlen 以未定义的行为离开数组

比如做

char cp [6];
cp[0]=1;
cp[1]=1;
cp[2]=1;
cp[3]=1;
cp[4]=1;
cp[5] = 0;
printf("%zu\n", strlen(cp));

还要注意我更改了格式,strlen returns a size_t 正确的格式是%zu


除了你在数组中放入代码为 1 的字符之外,该字符通常不可写,你想要“1”而不是 1 吗?