请有人帮我理解为什么计数器c
在没有首次初始化的情况下在for循环中递增?
#include<stdio.h>
int main(){
char s1[50];
char s2[50];
int i,c,j,l;
printf("enter first name: ");
scanf("%s",s1);
printf("enter last name: ");
scanf("%s",s2);
for(i=0;i<50&&s1[i]!='\0';)
{
i++;
c++;
}
l=c-1;
for(j=0; j<50 && s2[j]!='\0'; j++)
{
s1[l]=s2[j];
l++;
}
for(i=0; s1[i]!='\0' && i<l; i++)
{
printf("%c",s1[i]);
}
return 0;
}
答案 0 :(得分:2)
标准(ISO / IEC 9899:201x 6.79-> 10)说:
如果未初始化具有自动存储持续时间的对象 显然,它的价值是不确定的。
有些编译器可能会将它们初始化为零,但您不能期望所有编译器都有相同的行为。
但是,我看到问题是为什么计数器“c”会增加?
您尚未初始化变量这一事实并不会阻止C
递增变量。但是,重新迭代上述点,起始值是不确定的。
总而言之,您的程序有不明确的行为
要获得预期结果,请更改语句
int i,c,j,l;
到
int i,c=0,j,l; // c is initialized to zero, all others are at some point in the pgm