gpt4 book ai didi

使用函数返回值的 C++ 数学比较不起作用

转载 作者:太空狗 更新时间:2023-10-29 23:50:59 25 4
gpt4 key购买 nike

考虑以下代码:

   char foo[32] = "123456";
printf("strlen(foo) = %d\n", strlen(foo));
if ((5 - strlen(foo)) > 0)
{
//This statement prints because the comparison above returns true, why?
printf("String must be less than 5 characters, test 1\n");
}

int tmp;
if ((tmp = 5-strlen(foo)) > 0)
{
//This statement does not print and makes since
printf("String must be less than 5 characters, test 2\n");
}

正如评论所指出的,我不明白为什么在与另一个值工作比较之前需要一个临时变量来存储数学计算的结果。

最佳答案

你得到 true 的原因是因为减法的结果是 unsigned。反过来,这是因为 size_tstrlen() 的返回类型,是无符号的,而且它足够大以至于 int 被转换成它的类型而不是其他方式周围。

当您将减法的结果分配给带符号的 int 变量 tmp 时,您使结果再次带符号,因此比较按预期进行。

一般来说,如果您怀疑结果可能变为负数,则在减去无符号值时应格外小心。如果您不是 100% 确定,请使用带符号的类型,或者首先避免减法。例如,上述条件的合法替代是

if (strlen(foo) <= 5)
...

关于使用函数返回值的 C++ 数学比较不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24827789/

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