字串: char dat[5]= "abcd';
在記憶體中占用4+1=5個位元組,其中前4個位元組分別儲存: abcd,
最後1個位元組是:'\0',
表示abcd字串的結束位置,
這裡dat的記憶體空間至少要5個位元組,如果是4個位元組, char dat[4];
則:你一定不要將dat當作字串來使用,否則可能出現如下問題:
1、在輸出資料時,例如:printf("%s", dat) , 可能結果並不是你所想象的,
這個要看在記憶體中的具體情況,除非在dat之後,即記憶體位置dat[4]正好為0:
dat[4] == 0,這種情況誰都不好保證的!!!
2、給dat緩衝區賦值:例如:strcpy(dat, "1234") , 很可能會出錯!!
因為上面語句的結果是:dat[0]=='1',dat[1]=='2',dat[2]=='3',dat[3]=='4',
dat[4]=='\0', 注意,dat[4]並不是char dat[4]所分配的,即該位元組有可能是
別人的儲存空間,但是strcpy已經將dat[4]記憶體位置的數值設定為0了,
因此極有可能錯誤(甚至程式異常!),除非dat[4]記憶體位置沒有人使用,或者dat[4]記憶體位置在設定之前的數值剛好已經是0了!
那麼,我是如何清除的呢?
簡單: dat[0]=0,這樣該dat字串已經被清除了;
如果你將dat當作位元組資料來是使用,最好是使用:
memset(dat, 0, sizeof(dat));
來徹底清除,
strlen不區分是陣列還是指標,就讀到\0為止返回長度。而且strlen是不把\0計入字串的長度的。
ssl1211 好文章 字串
nodgd寫了一篇文章,自認為這是一篇好文章。nodgd的文章由n個小寫英文本母組成。文章的乙個子串指的是文章中的一段連續的字母,子串的長度就是這一段的字母個數。nodgd在文章中用了排比 對偶 前後照應之類的手法,所以就有很多個子串是相同或者相近的。為了向大家證明這是一篇好文章,nodgd決定給自...
關於工作的好文章
我有個有趣的觀察,外企公司多的是25 35歲的白領,40歲以上的員工很少,二三十歲的外企員工是意氣風發的,但外企公司40歲附近的經理人是很尷尬的。我見過的40歲附近的外企經理人大多在一直跳槽,最後大多跳到民企,比方說,唐駿。外企員工的成功很大程度上是公司的成功,並非個人的成功,西門子的確比國美大,但...
關於快取的幾篇好文章
追求極致 從技術細節看美團架構 memcache架構新思考 memcache應用場景介紹,說明 zz 大型web系統資料快取設計 l 大型 後台架構的web server與快取 intelligence computing 微博到底有多重視分布式快取 上 從技術細節看美團的架構 服務架構學習之zim...