C語言陷阱——隱式類型轉換

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.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章