日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言中,当计算字符数组长度时,用sizeof 和strlen 的原理及两者的区别

發(fā)布時間:2025/4/14 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言中,当计算字符数组长度时,用sizeof 和strlen 的原理及两者的区别 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

字符數(shù)組的長度計算:必須以終止符’/0'作為邊界,但對字符數(shù)組賦值時,有兩種方式:

1: 定義時用字符初始化

(1)char chs[7] = {'a', 'c', '0', 'z', '3','d'}; // 長度為6

?上式等價于: (2)char chs[7] = {'a', 'c', '0', 'z', '3','d', '/0'}; // 長度為6

?也等價于: (3)char chs[] = {'a', 'c', '0', 'z', '3','d', '/0' }; // 長度為6

?

不等價于: (4)char chs[] = {'a', 'c', '0', 'z', '3','d'}; // 長度未知,因為數(shù)組最后沒有結(jié)束符'/0'

不等價 (5)char chs[6] = {'a', 'c', '0', 'z', '3','d'}// 長度未知,因為數(shù)組最后沒有結(jié)束符'/0'

其中 :(4)和(5)也是等價的,但不應(yīng)該在實際應(yīng)用中出現(xiàn),因為沒有結(jié)束符的數(shù)組長度未知,容易出現(xiàn)數(shù)組越界,致使訪問非法內(nèi)存,造成不可預(yù)料的程序錯誤。

?

因為字符數(shù)組是C 語言的概念,可見,C 語言語法中并未保證 :字符數(shù)組的結(jié)尾一定有結(jié)束符,這就需要程序員自己采取措施,以保證在數(shù)組的最后一個元素為 '/0' 。

?

2: 用字符串對數(shù)組進行初始化

在C語言中沒有專門的字符串變量,通常用一個字符數(shù)組來存放一個字符串。字符串總是以'/0'作為串的結(jié)束符。因此當(dāng)把一個字符串存入一個數(shù)組時,也把結(jié)束符'/0'存入數(shù)組,并以此作為該字符串是否結(jié)束的標(biāo)志。有了'/0'標(biāo)志后,就不必再用字符數(shù)組的長度來判斷字符串的長度了。

C語言允許用字符串的方式對數(shù)組作初始化賦值。

例如:

?? ?char c[]={'c', ' ','p','r','o','g','r','a','m'};

可寫為:

?? ? ? ?char c[]={"C program"};

?? ?或去掉{}寫為:

?? ? ? ?char c[]="C program";

用字符串方式賦值比用字符逐個賦值要多占一個字節(jié), 用于存放字符串結(jié)束標(biāo)志'/0'。上面的數(shù)組c在內(nèi)存中的實際存放情況為:

C ? p r o g r a m /0

‘/0'是由C編譯系統(tǒng)自動加上的。由于采用了‘/0'標(biāo)志,所以在用字符串賦初值時一般無須指定數(shù)組的長度, 而由系統(tǒng)自行處理。

?

?

3. sizeof 和 strlen 的區(qū)別

?

? strlen只能用char*做參數(shù),且該char數(shù)組必須是以''/0''結(jié)尾的。

?

?

數(shù)組做sizeof的參數(shù)不退化,傳遞給strlen就退化為指針了。 詳細(xì)說明可參見: 百度知道: strlen和sizeof有什么區(qū)別?

http://zhidao.baidu.com/question/12033577.html注意:大部分編譯程序 在編譯的時候就把sizeof計算過了 是類型或是變量的長度這就是sizeof(x)可以用來定義數(shù)組維數(shù)的原因 。所以,sizeof 即使在字符數(shù)組沒有終止符'/0' 的時候,也能夠計算出數(shù)組“長度”的原因,但這里的“長度”實際上是:編譯器分配給該數(shù)組變量的內(nèi)存大小!例如:char chs[] = {'a', 'c', '/0', 'z', '3','d'}; // sizeof(chs) = 6; 而strlen(chs) = 2.

總結(jié)

以上是生活随笔為你收集整理的C语言中,当计算字符数组长度时,用sizeof 和strlen 的原理及两者的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。