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