gpt4 book ai didi

c - C if 语句无效?

转载 作者:行者123 更新时间:2023-11-30 20:59:43 26 4
gpt4 key购买 nike

我正在自学 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");
}

最佳答案

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

关于c - C if 语句无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46018175/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com