2016-12-18 13 views
-2

カウンタcが最初に初期化されずにforループでインクリメントされている理由を理解できますか?カウンタ "c"がforループでインクリメントされずに初期化されない1

#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

それが働いていた場合*不運*自分で考えてみましょう。それは起こった未定義の行動と呼ばれるものです。結果は何でもできました。ところで、あなたはあなたのコードをインデントし、きれいに十分な間隔で書くべきです。私を信じて、あなたは後でそれをしたことをうれしく思います。 –

+0

書籍を読んで先生に相談してください。この質問への答えはあなたの一時的な問題を解決してそれを治しません。 – user902384

答えて

2

標準(ISO/IEC 9899:201X 6.79-> 10)は言う:

自動記憶域期間を持つオブジェクトが 明示的に初期化されていない場合、その値は不定です。

一部のコンパイラでは、すべてのコンパイラで同じ動作が期待できませんが、ゼロに初期化することがあります。

しかし、私はその質問がであることを知っていますが、なぜカウンター "c"がインクリメントされていますか?

変数を初期化していないという事実は、Cがそれをインクリメントするのを止めません。ただし、上記の点を再実行すると、開始値は不確定です。締結する

、あなたのプログラムがあいまいな行動を持って

は、予想される結果は

int i,c=0,j,l; // c is initialized to zero, all others are at some point in the pgm 
に声明

int i,c,j,l; 

を変更を取得するには

+0

私のコードは正しくない私は初期化する必要がありますありがとう –

関連する問題