#include<stdio.h>
#include<string.h>
int main(){
int a[]={1,2,3,4};
int size= sizeof(a)/sizeof(int);
printf("\nSize/capacity of integer type array(with no limit) %d\n",size);
int a1[6]={1,2,3,4};
int size1= sizeof(a1)/sizeof(int);
printf("\nSize/capacity of integer type array(with a limit of 7) %d\n",size1);
printf("\n");
char b[7]={'a','b','c','d','e'};
int size2= sizeof(b)/sizeof(char);
int length=strlen(b);
printf("\nSize/capacity of char type array(with a limit of 7) %d\n",size2);
printf("\nNumber of char type data in the array %d\n",length);
char br[]={'k','l'};
int size3= sizeof(br)/sizeof(char);
int length1=strlen(br);
printf("\nSize/capacity of char type array(with no limit) %d\n",size3);
printf("\nNumber of char type data in the array length1 %d\n",length1); //answer should have been 2
return 0;
}`
它给了我7作为值length 1的输出。当我注解掉上面的块(在br[]的初始化之上)时,数组长度显示为3。我想知道为什么会发生这种情况和解决方案。我是新手,但提前感谢。
上面代码的输出:
整数类型数组的大小/容量(无限制)4
整数类型数组的大小/容量(限制为7)6
char类型数组的大小/容量(限制为7)7
数组中的char类型数据数5
char类型数组的大小/容量(无限制)2
数组中char类型数据的数量length 1 7
3条答案
按热度按时间f87krz0w1#
strlen
并不告诉你字符数组的长度,它告诉你一个以null结尾的字符串的长度。数组br
不保存字符串,因为它的长度只够保存用于初始化它的单个字符,而这些字符不包括值为0的字节。如果使用字符串文字初始化数组而不是字符的初始化器列表:
然后调整数组的大小以包含作为字符串文字一部分的终止空字节,然后可以对其使用字符串函数。
yshpjwxd2#
strlen通过查找空终止符“\0”来工作,并且字符数组不会以空终止符结束。
把这个换了
到这个
然后对B做类似的改变(加上数组的大小加1),看看会发生什么。
wh6knrhe3#
以
4
、'e'
或'l'
结尾的“char array”不是空终止的,因此不是字符串,因此对其中一个字符串调用strlen是UB。