1
今天我试图调试一个应用程序,并发现了一个包含strlen()的布尔表达式的奇怪行为。布尔表达式中的strlen()的奇怪行为
这里有一个简单的代码来重现问题。
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),但它实际上无限循环。
实际上'boolean'是什么?这不是一个C++内在类型。 –
对不起,我犯了一个错误。这是愚蠢的。 –
此外,只是一个提示,从不在循环中使用'strlen' - 它需要O(n),其中n是字符串大小,所以您只是一次又一次地进行相同的操作,不必要的 –