2017-09-02 91 views
-3

我在教自己C,我在運行程序時似乎得到了不正確的輸出。我總是得到「他們是平等的」,即使他們都沒有,還返回值似乎只能打印無論是輸入的第一個字,我怎麼能解決這個問題?:如果陳述語句無效?

#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]; 0;; varchar [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

如果你沒有一個格式符輸出字符串,使用puts而不是printf

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"); 
    } 
}