完全填充数组的长度
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 吗?
#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 吗?