无效的C语句?

时间:2017-09-02 21:03:08

标签: c if-statement

我正在教自己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 个答案:

答案 0 :(得分: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");
    }
}