C語言陷阱——隱式類型轉換
C語言有隱式類型轉換,即如果將無符號類型和有符號類型一起運算,會將有符號類型轉換成無符號類型,這種操作如果放在while和if語句的條件判斷中,會有想不到的結果,所以要小心小心~
舉例:
strlen函數返回值是size_t,strlen不包含‘/0’
#include <stdio.h>
#include<string.h>
int main()
{
const char*str = "abcdef";
int i = -1;
if(strlen(str) > i){
printf("Yes\n");
}
else{
printf("No\n");
}
printf("-1的無符號類型:%u\n", -1);
return 0;
}~~~
運行結果:
![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20190412103903573.PNG)
str的長度是6,必然大於-1,但運行結果是No,這說明,整型i在和size_t類型的數作比較時,-1變成了size_t類型,**即有符號數變成了無符號數**,是一個很大的數,遠遠大於6,所以輸出No.