C語言一個關於sizeof和strlen的問題

2023-03-10 07:05:07 字數 3236 閱讀 8274

1樓:諶同書林丙

2個意義不一樣的。

strlen

是函式。引數為。

chan*,專門針對字串的。

sizeof

是運算子,不是函式,可以這樣寫sizeofa,等等。strlen求字串的長度,不含字串結束標誌。因此strlen(a)

sizeof求的是編譯器為陣列放分配的空間大小,一旦。

chara[5]

定義了,則就會分配5個位元組的空間。

2樓:鮑元斐邵琬

strlen是測試字串長度的函式,測試的值為字串中的實際長度(不包括'\0')。

sizeof的作用就是返回一個物件或者型別所佔的記憶體位元組數。一個字元佔一個位元組,a、b各佔一個,還有一個'\0',所以是3。

至於這個為什麼是五,因為賦給字元陣列的初值如果個數小於陣列的長度,其餘未賦值的元素自動定為空字元即'\0'

3樓:雍玉蘭謇未

問題1:不是字串儲存在一個位元組裡而是char*

ss指向的是字串的第一個位元組,而你sizeof()內的引數正好是指標所指的那塊空間的地址所以是一個位元組。

問題2:在c語言中,strlen()的形參是指標,而你的實參s3中並沒有結束符\0所以指標不會認為結束,所以長度不能確定。

4樓:爾士恩無嫣

sizeof(陣列名),得到的是這個陣列所佔的位元組數。

chara[

]="ab";

這樣的賦值方法,使得陣列的大小就是字串的大小;而」ab「是一個字串,字串是以'\0'結尾的,所以這個字串有3個字元,也就是說,陣列a有3個位元組的大小,所以是3了。

5樓:戰秋芹充娟

strlen(a)是求的該陣列的元素個數所以當a[

]="ab"時,strlen(a)的結果是2;sizeof(a)是求陣列佔的空間的,當a[

]="ab"時,它實際的空間就是3,因為最後還有自帶的一個結束符,也佔用一個空間。比如a=asdf",那麼sizeof(a)的結果就是5而不是4。

6樓:擁雲莊主

常量字串後面系統預設會加上一個'\0'作為字串結束符,所以。

char buf=123456";定義陣列的時候,會算上字串結束符,也就是說buf陣列的長度其實是8,sizeof作用於陣列時計算的是陣列佔用的記憶體位元組數,所以,結果是8

而strlen計算陣列長度時是不包含字串結束符的,所以,結果是7

7樓:匿名使用者

strlen測字元長度 不包括結束符'\0'

sizeof測所佔空間 包含結束符'\0'

c語言中sizeof與strlen的區別是什麼

8樓:匿名使用者

一、指代不同。

1、sizeof:用於獲取字串的長度,是處理字串的重要工具。

2、strlen:所作的是一個計數器的工作。

二、規則不同。

1、sizeof:可用於任何變數名、型別名或常量值,當用於變數名(不是陣列名)或常量時,不需要用圓括號。

2、strlen:從記憶體的某個位置(可以是字串開頭,中間某個位置,甚至是某個不確定的記憶體區域)開始掃描,直到碰到第一個字串結束符'\0'為止,然後返回計數器值。

三、用法不同。

1、sizeof:sizeof( type_name );sizeof( 型別 );編譯時起作用,而不是執行時。

2、strlen:extern unsigned int strlen(char *s);返回s的長度,不包括結束符null。

9樓:小丁創業

區別如下:

1、指代上的區別。

(1)sizeof:用來獲取字串長度的導引,是處理字串的重要工具。

(2)strlen:做的是一個計數器。

2、用法上的區別。

(1)sizeof:sizeof( type_name );sizeof(type); 在編譯時有效,而不是在執行時有效。

(2)strlen:extern unsigned int strlen(char *s); 返回s的長度,不包含終止符null。

3、規則上的區別。

(1)sizeof:可用於任何變數名,型別名或常量值。 當用於變數名(不是陣列名)或常量時,不需要括號。

(2)strlen:從記憶體的某個特定位置開始掃描(可以是字串的開頭,中間的某個位置,甚至是不確定的儲存區域),直到第一個字串結束字元'\ 0'為止 ,然後返回計數器值。

10樓:倒黴熊

sizeof獲得是所佔的位元組數,所分配的空間的位元組數。

strlen獲得是長度(實際字元的個數)。

例如: char a[5]="abc";

sizeof(a) 等於5,因為分配了5個位元組的空間。

而strlen(a)等於3,這是其實際字元的個數。

11樓:

sizeof 是被測試型別佔用位元組的大小。

strlen是以\0為結束符的字串的串長度(不含結束符)比如吧:

char *p = 0123456789abcdef";

char str = 0123456789abcdef";

char str2[100] =0123456789abcdef";

sizeof(p) 只是 4(或8與作業系統有關,32位系統應當只是4)

strlen(p) 是16個長度。

sizeof(str) 是17

strlen(str) 是16

sizeof(str2) 是100

strlen(str2) 是16

c語言sizeof和strlen的區別

12樓:匿名使用者

char name="nike" ;

sizeof(name)=5

如果陣列定義成int,就不能用scanf("%s",name);來輸入字串了,因為這兩個型別是不同的。%s只能輸入char字串資料。

13樓:網友

sizeof運算子計算的是運算元型別的大小,只是陣列會乘以長度而已,和傳入的具體內容無關。

要強行輸出5的話那就sizeof("nike")吧……

要強行可以計算補了0長度的那就strlen+1

14樓:萢萢

\0 只在char型陣列中才有。

C語言中,sizeof和strlen都是表示字串長度的嗎

sizeof 計算的是資料在記憶體中存放的長度,單位是 位元組 可以對任何資料型別做運算,而且它是一個運算子 和 類似 當對字串計算時,包含末尾的 0 當對字元陣列操作時,返回的是陣列的總的長度,也就是當把陣列作為引數傳遞給sizeof時是不會退化的。strlen 計算的是字串的長度,單位是 字元 ...

關於C語言的問題,求教,一個關於C語言的問題,求教!!

a b 是賦值 a b 是等號 這是新手長犯錯誤 c語言中經常犯的毛病!初學者必看!c 語言的最大特點是 功能強 使用方便靈活。c編譯的程式對語法檢查並不象其它高階語言那麼嚴格,這就給程式設計人員留下 靈活的餘地 但還是由於這個靈活給程式的除錯帶來了許多不便,尤其對初學c語言的人來說,經常會出一些連...

關於c語言的簡單問題,一個關於c語言的簡單問題

scanf f,radius 改為scanf f radius printf f n,area 改為printf f n area 恩 你的錯誤就是printf和scanf函式的格式不對啊其它的都很好啊 把書本上的格式用程式來除錯下 這樣記憶更深刻 scanf f radius printf f n...