2017-09-02 85 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"); 
    } 
}