C 字串長度與位元組的問題,C 字串有效長度的問題

2022-02-26 18:10:55 字數 4041 閱讀 5717

1樓:

1、strlen函式是返回字元長度(以空字元為結束符)所以是5

2、sizeof(str);返回是指定變數占用空間大小str是指標變數,指標大小為4,所以返回4你可以把str變成陣列

char str="12345";

此時str是陣列,所以sizeof(str)返回的是6

2樓:

strlen()函式返回不包含結束符的長度sizeof(str)得到的是型別char*的長度如果定義是:

char str="12345";

那麼sizeof(str)就是6了

3樓:匿名使用者

strlen()是求字元的長度,字串中有多少字元就輸出幾,不包括結束符『\0』;

sizeof()是求其在記憶體中的長度。

sizeof(str)=4;因為str是指標啊。所有指標都佔四個位元組。

如果要輸出6,那應該是sizeof(「12345」);

4樓:楊卓燁

你定義的是指標變數,他的sizeof(str)就是4,這是規定

要是換成陣列就不是啦,就和你想的一樣啦

5樓:匿名使用者

char str = 「12345」

char *str = "12345"

含義不同,

char str = 「12345」是字元陣列,str裡有『1』『2』『3』『4』『5』『\0』。每個字元許乙個位元組,所以為 6個位元組。

char *str = "12345"含義是,指標str指向"12345",str的值是"12345"中首字元的『1』位址。

也就是說,用char *str = "12345"比char str = 「12345」

多分配了乙個儲存位址的空間,用於儲存字元陣列的首位址,這個儲存空間是多大(占有幾個位元組)?一般32位機器和現行的編譯器,指標的長度一般指定為4個位元組,記住就是了。

strlen求長度不包含『\0』。

c++字串有效長度的問題

6樓:mai田de_守望者

c語言中使用strlen()函式來測量字串的實際長度,需要標頭檔案string,c++應該也可以。

7樓:鴻軒

兄弟,sizeof 是測型別所佔位元組大小的,你這個型別應該是char [100]型別,實際上就是乙個類,然後你定義,char s[100],就相當於建立乙個物件s,sizeof(s)的值為s 所佔位元組大小,當然是10個位元組的大小了,也就是100,它的大小相當於100個sizeof(char),

至於你說的字串長度,是strlen(),這個函式需要標頭檔案或者,它的作用是,測乙個字串的長度,不包括最後的'\0',

建議你先把c語言學好,再來學c++;

8樓:匿名使用者

#include

std::size_t std::strlen(char const *);

順便贈送標準庫一枚

那啥為什麼不用string。。。感覺怪奇怪的

9樓:匿名使用者

只說長度沒說要用這字串吧。

char ch;

int size=-1;

dowhile(ch!='\n');

size的值就是大小

c++字串長度問題

10樓:

string 是乙個類 不是資料型別

string的實現在各庫中可能有所不同,但是在同一庫中相同一點是,無論你的string裡放多長的字串,它的sizeof()都是固定的,字串所佔的空間是從堆中動態分配的,與sizeof()無關。

有sizeof()為12、32位元組的庫實現。 但是vc6.0測試後sizeof(string)=16.還是跟編譯器有關。

首先看一下sizeof在msdn上的定義:

the sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). this keyword returns a value of type size_t.

看到return這個字眼,是不是想到了函式?錯了,sizeof不是乙個函式,你見過給乙個函式傳引數,而不加括號的嗎?sizeof可以,所以sizeof不是函式。

網上有人說sizeof是一元操作符,但是我並不這麼認為,因為sizeof更像乙個特殊的巨集,它是在編譯階段求值的。舉個例子:

cout<

cout<

在編譯階段已經被翻譯為:

cout<<4<

cout<<1<

這裡有個陷阱,看下面的程式:

int a = 0;

cout<

cout<

輸出為什麼是4,0而不是期望中的4,3???就在於sizeof在編譯階段處理的特性。由於sizeof不能被編譯成機器碼,所以sizeof作用範圍內,也就是()裡面的內容也不能被編譯,而是被替換成型別。

=操作符返回左運算元的型別,所以a=3相當於int,而**也被替換為:

int a = 0;

cout<<4<

cout<

所以,sizeof是不可能支援鏈式表示式的,這也是和一元操作符不一樣的地方。

結論:不要把sizeof當成函式,也不要看作一元操作符,把他當成乙個特殊的編譯預處理。

11樓:匿名使用者

當你定義任何乙個sting類的字串時,它所佔的位元組數都是32(或者16),估計不通的編譯器,會得到不同的結果。

在c++中 sting表示的字串 個c語言裡面的char* 字串不是一樣的 前著 的資料型別是字串類。

12樓:匿名使用者

string 是乙個類 不是資料型別 所以 t 的內容不同 sizeof(t)的大小不同。

13樓:匿名使用者

string是乙個object,這個物件在記憶體中占用了16byte

string可能是這樣:

class string ;

14樓:匿名使用者

這個得看string內部結構了

c++字串有效長度的問題

15樓:卯楚楚鄒辰

當你定義任何乙個sting類的字串時,它所佔的位元組數都是32(或者16),估計不通的編譯器,會得到不同的結果。

在c++中

sting表示的字串

個c語言裡面的char*

字串不是一樣的

前著的資料型別是字串類。

c++字串長度問題。char a[4]="your" 這個有問題嗎?為什麼書上說'\0'佔據記憶體

16樓:匿名使用者

char a[4]="your" 有問題,用串自動初始化字元陣列,但長度不夠。"your"需要五個元素。即y,o,u,r,\0

可以手動初始化程式your,但不能當串使用。

17樓:聽不清啊

char a[4]="your" 這個有問題。應當為char a[5]="your"。

'\0'佔據記憶體空間但不計入字串的長度。上述字串的長度是4。

'\0'只是表示乙個字串的結束,它的儲存也要佔乙個位元組的空間,但是your是由四個字元組成的。這二者不矛盾。

18樓:匿名使用者

首先,第乙個沒有問題

c語言中,關於字串長度與字元陣列長度的問題

c語言約定字串以 0 結尾,上述陣列末尾沒有 0 所以字串的長度無法確定。陣列長度指的是陣列的元素個數,字串長度是以 0 為標誌來確定的,舉個例子 char a 20 abc 陣列長度是20,而字串長度是3,隱含的 0 不算在字串長度中。char a 按陣列來說已經初始化了3個char型別,分配了3...

c 輸入字串,且字串長度未知,怎麼做

這個問題其實有點難的,1.如果你用char buff n 這種方式來儲存字串,n你是無法確定的。此時你需要這樣做 int n cout 請輸入字串長度 cin n char buff new char n 1 動態申請記憶體,為字串結束標記留乙個未知,所以加1 方法2 你在程式前面 include ...

c語言輸入長度不超過字元的字串將其

第一種 include include int main int i,j 0,len strlen str1 for i len 1 i 0 i for i 0 i 第二種 include include int main printf s n str return 0 第一種 include vo...