我正在教自己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");
}
答案 0 :(得分:1)
您的var
和var2
缓冲区是零长度数组([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");
}
}