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是字符串大小,所以您只是一次又一次地進行相同的操作,不必要的 –