C语言中size_t的陷阱
生活随笔
收集整理的這篇文章主要介紹了
C语言中size_t的陷阱
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
今天寫了一個(gè)類似這樣的程序:
#include <stdio.h> #include <string.h> int main() {int i = -1;if(i > strlen("Demon"))printf("Hello World");elseprintf("Hello Demon");return 0; }輸出的竟然是Hello World!-1 > 5?!
仔細(xì)想想,原來問題出在strlen上,strlen返回的類型是size_t,size_t的定義為:
typedef unsigned int size_t;即無符號(hào)的整型,而i的類型是int,即有符號(hào)的整型。當(dāng)有符號(hào)整型和無符號(hào)整型進(jìn)行運(yùn)算時(shí),有符號(hào)整型會(huì)先自動(dòng)轉(zhuǎn)化成無符號(hào)。-1轉(zhuǎn)化成無符號(hào)數(shù)為4294967295,遠(yuǎn)遠(yuǎn)大于5。
今后遇到有符號(hào)數(shù)和無符號(hào)數(shù)之間的運(yùn)算時(shí)要千萬小心。
總結(jié)
以上是生活随笔為你收集整理的C语言中size_t的陷阱的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux编程:getenv,puten
- 下一篇: 计算机界名人榜-----约翰·冯·诺依曼