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語言約定字串以 0 結尾,上述陣列末尾沒有 0 所以字串的長度無法確定。陣列長度指的是陣列的元素個數,字串長度是以 0 為標誌來確定的,舉個例子 char a 20 abc 陣列長度是20,而字串長度是3,隱含的 0 不算在字串長度中。char a 按陣列來說已經初始化了3個char型別,分配了3... 這個問題其實有點難的,1.如果你用char buff n 這種方式來儲存字串,n你是無法確定的。此時你需要這樣做 int n cout 請輸入字串長度 cin n char buff new char n 1 動態申請記憶體,為字串結束標記留乙個未知,所以加1 方法2 你在程式前面 include ... 第一種 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...c語言中,關於字串長度與字元陣列長度的問題
c 輸入字串,且字串長度未知,怎麼做
c語言輸入長度不超過字元的字串將其