计数器“c”在for循环中递增而不被1初始化

时间:2016-12-18 09:49:47

标签: c

请有人帮我理解为什么计数器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;
}

1 个答案:

答案 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