gpt4 book ai didi

c - if 语句选择了错误的条件

转载 作者:行者123 更新时间:2023-12-02 02:29:11 24 4
gpt4 key购买 nike

我对这段代码有一个问题:我不知道为什么它打印 B 而不是 A,因为条件是 true。 strlen(x)明显大于i 。你能帮我吗?

#include <stdio.h>
#include <string.h>

int main()
{
char x[]="Hello";
int i = -3;

if(strlen(x)>i)
{
printf("A");
}
else
{
printf("B");
}
return 0;
}

最佳答案

标准函数strlen声明如下

size_t strlen(const char *s);

其中类型size_t是实现定义的无符号整数类型,其等级不低于类型int的等级。通常,size_t 类型被定义为 unsigned long 类型的别名。

在用作if语句的条件的表达式中

if(strlen(x)>i)

编译器使用通常的算术转换来确定操作数的公共(public)类型。即通过传播符号位将操作数 i 转换为 size_t 类型。因此,转换后的操作数的值是一个非常大的 size_t 类型的无符号整数,大于调用 strlen 的返回值。因此条件的计算结果为逻辑假。

这是一个演示程序。

#include <stdio.h>

int main(void)
{
int i = -3;

printf( "( size_t )i = %zu\n", ( size_t )i );

return 0;
}

它的输出可能看起来像

( size_t )i = 18446744073709551613

如果您想在程序中获得预期的结果,您应该编写

if( ( int )strlen(x)>i)

或者例如

if( ( long int )strlen(x)>i)

也就是说,您需要将函数 strlen 返回的值转换为某种有符号整数类型。

关于c - if 语句选择了错误的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65322941/

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