gpt4 book ai didi

c++ - bool 表达式中带有 strlen() 的奇怪行为

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:25:30 24 4
gpt4 key购买 nike

今天我试图调试一个应用程序,我发现了一个包含 strlen() 的 bool 表达式的奇怪行为。

下面是重现问题的简单代码。

char test[20] = "testTestTest";  //the length is 12
bool b = 0 < (9 - strlen(test)); //should be false (0 < -3) = false

在执行结束时 b 为真,但它应该为假。

将 strlen() 的结果保存在变量中有效。

char test[20] = "testTestTest"; //the length is 12
int length = strlen(test); //save the length
bool b = 0 < (9 - length); //should be false (0 < -3) = false

在执行结束时 b 为假(因为它应该是)。

这两种实现有什么区别?
为什么第一个不起作用?

原来受影响的代码是这样的:

char test[20] = "testTestTest"; //the length is 12
for(int i = 0; i < (9 - strlen(test)); i++){
//do something (in my case I do NOT edit the test string)
}

for 循环应该永远不会执行(字符串 >= 9)但它实际上会无限循环。

最佳答案

Saving the result of strlen() in a variable works.

您的变量与 strlen() 返回的类型不同。它是从 size_tint 的隐式转换,使它起作用。

非工作版本通常将 9 - strlen(test) 评估为 (size_t)9 - strlen(test),一个非常大的无符号数,而不是9 - (int)strlen(test),负符号数。

关于c++ - bool 表达式中带有 strlen() 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35091840/

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