2017-09-02 10 views
-3

私はC言語を教えています。プログラムを実行すると正しく出力されていないようです。私はいつも、私はこれをどのように問題を解決することができ、そうでない場合でも、また、戻り値のみが入力されているものの最初の単語を印刷するようだ、「彼らが等しい」取得?:C if文が無効ですか?

#include <stdio.h> 
char var[0]; 
char var2[0]; 
int main(void) { 
    printf("Enter Var 1=> "); 
    scanf("%s", &var); 
    printf(var); 
    printf("\n"); 
    printf("Enter Var 2=> "); 
    scanf("%s", &var2); 
    printf(var2); 
    printf("\n"); 
    if (var == var2) 
     printf("They are equal"); 
    else 
     printf("They Are not equal"); 
} 
+1

は 'strcmp'が......' ...の#include 良くここに適しているかの(のstrcmp(VAR、var2の)== 0){...} ' –

+3

あなた' var'と'var2'バッファは長さがゼロの配列(' [0] ')なので、' scanf'を使うと未割り当てのメモリに書き込んでしまい、未定義の動作が発生します。 – Dai

+1

'char var [0]; char var2 [0]; ' - >' char var [32]; char var2 [32]; '...' scanf( "%31s"、var); '...また、 'printf(var); printf(" \ n ");' - > 'printf("%s \ n "、var);'または 'puts(var);' – BLUEPIXY

答えて

1

あなたvarvar2バッファは長さがゼロの配列([0])なので、scanfを使用すると、未割り当てのメモリに書き込みが行われているため、未定義の動作が発生しています。

あなたはグローバル変数を回避し、長さの制限scanfフォーマット文字列を使用する必要があるため、好ましくは、スタック上に、十分なサイズのバッファを割り当てる:あなたはフォーマット指定子なしで文字列を出力している場合https://msdn.microsoft.com/en-us/library/xdb9w69d.aspx

printfの代わりにputsを使用してください。

int main(void) { 

    char var1[100] = {0}; // 100 characters should be sufficient 
    char var2[100] = {0}; 
    puts("Enter Var 1=> "); 
    scanf("%99s", &var1); // restricted to 99 characters, +1 for the null terminator equals 100 
    printf("%s\n", var1); 

    puts("Enter Var 2=> "); 
    scanf("%99s", &var2); 
    printf("%s\n", var2); 

    if(strcmp(var1, var2) == 0) { // use strcmp to compare strings, not the `==` operator because C does not have operator overloading 
     puts("They are equal"); 
    } 
    else { 
     puts("They are not equal"); 
    } 
} 
関連する問題