在编写程序时,我正在用数字填充char数组的条目。在这样做之后,为没有零的数组计算的长度是正确的,但是对于从零开始的数组是零!
为什么这个结果会这样!我无法解释我的错误!?
int main()
{
int number_of_terms,no,j,i;
char arr[100];
char c;
scanf("%d",&number_of_terms);
for(i=0;i<number_of_terms;i++)
{
j=0;
while(c!='\n')
{
scanf("%d",&arr[j]);
if(c=getchar()=='\n')
break;
j++;
}
printf("Length is:%d\n",strlen(arr));
}
return 0;
}
for eg if i input my array elements as 4 5
lenght is 2
and if my array elements as 0 5
length is 0..
答案 0 :(得分:2)
您在格式说明符中使用“%d”,它会生成一个整数,并且您传入的是字符数组的地址。就像你的标题所说的那样,这是一种未定义的行为。特别是,零值将占用字符串中的4个单元格,并将零写入所有这些单元格。由于值为零的字符是结束标记,因此您将获得零长度字符串。但是,在另一个架构上,第二个角色可能会导致崩溃......
如果要将整数存储在数组中,则应使用int arr[...];
。如果要存储字符,请使用“%c”。
答案 1 :(得分:2)
您正在将值0复制到数组中。这个字符'\ 0'用于终止字符串。你想要的是复制字符'0'(值为48,参见ascii表)。
将%d更改为%c以解释输入具有字符而不是小数。
scanf("%c",&arr[j]);
arr
中的“字符串”也不会终止。在字符串的所有字符之后,您必须以值0结束字符串(这里的小数是正确的)。 strlen
需要它,因为它通过遍历数组并计算直到找到0来确定字符串的长度。