字串長度問題,字串長度問題

2022-05-26 02:20:18 字數 6032 閱讀 8691

1樓:迮悌赫連雅青

執行p=a;和p+=3;後p指向的是a[3]的地址,strcpy(p,"abcd")這個函式呼叫把"abcd"複製到從a[3]開始的陣列元素中,執行完後a的內容為,strcpy函式的返回值是第一個引數p的值,即a[3]的地址,它會作為引數傳給strlen函式,strlen函式會從a[3]開始計算字串長度直到遇到'\0',所以得到的結果就是4。

2樓:譙麗甫昊焱

是22吧,12個字母+2個字母+4*2(漢字佔2字元)=22

3樓:京千壽一凡

原因你自己已經說了啊!不加'\0',strlen怎麼知道字串到結尾了?不加時你測到了23,就是因為在第24個單元裡碰巧有個'\0',否則,不知還會是多少呢!

以'\0'結尾的字元型陣列才是字串,沒有'\0'的只是

字元陣列。

4樓:煙奕法滌

是21,漢字2個字元,l、f間的空格1個字元

5樓:亓錦歸丹丹

-----------來自華夏聯盟-----------

因為strlen函式是根據\0判斷結尾的,你不加\0他就往下判斷,直到遇到\0為止

還有問題可以繼續問我

6樓:聽不清啊

在這裡,\63是一個轉義字元,其ascii值為八進位制63,即十進位制51,也就是字元『3』。

接著的\\,就表示一個字元『\』。

再下面的\t,就是製表符tab,也就是接著看到的一段空白。

最後才是abc照原樣輸出。

7樓:花開春未

void main()

我們來分析一下字串 "\63\\\tabc",它是由\63 \\ \t a b c組成,它們的意思分別是:

\63 八進位制的63,即十進位制的51,即字元'3'(查閱ascii表可知)

\\ \

\t 製表符

a a

b b

c c

所以列印字串的結果為: 收到通知3\製表符abc,即你得到的結果 3\ abc

8樓:冰血無雙

\是轉義字元

\6,3,\\,\t,abc

\6不代表任何char型別所以沒有

\t 是代表製表符 所以會空幾個長度

所以結果是3\ abc

9樓:做而論道

可以使用函式,得出長度。

10樓:韓燎笪山

一個漢字是2個字元。空格是一個字元

希望結交一些敢於挑戰,不服現狀的朋友。516qq995590

求字串長度的問題(sizeof)

11樓:匿名使用者

說白了,sizeof是求型別的大小,不管是表示式還是後面直接加型別;換種說法是在其後表示式在記憶體中佔用的位元組。

p是char *型別,當然是4位元組。

你改為char p = "hello";

這就是後面字串的長度。

或者用strlen函式

要是規定只能用sizeof,那就這樣寫。

int size = 0;

while(*p++)

size += sizeof(*p);

沒什麼意義,這樣的**寫出來讓人笑話。

12樓:匿名使用者

首先你要明確sizeof到底是幹什麼的?用來求變數佔用的空間大小sizeof(p);求得是指標p的大小,不管你上面是任何型別,任何字串,都是4,因為指標的空間大小就是4;

char *p="hello";//改成char p="hello";

cout<

cout<

13樓:維度科學

回答sizeof是求型別的大小,不管是表示式還是後面直接加型別;換種說法是在其後表示式在記憶體中佔用的位元組。

p是char *型別,當然是4位元組。

改為char p = "hello";

這就是後面字串的長度。

sizeof(p);求得是指標p的大小,不管你上面是任何型別,任何字串,都是4,因為指標的空間大小就是4;

char *p="hello";//改成char p="hello";

cout<

cout<

字串在儲存上類似字元陣列

它每一位單個元素都是能提取的,字串的零位是它的長度,如s[0]=10,這提供給我們很多方便,例如高精度運算時每一位都能轉化為數字存入陣列。

通常以串的整體作為操作物件,如:在串中查詢某個子串、求取一個子串、在串的某個位置上插入一個子串以及刪除一個子串等。兩個字串相等的充要條件是:

長度相等,並且各個對應位置上的字元都相等。

設p、q是兩個串,求q在p中首次出現的位置的運算叫做模式匹配。串的兩種最基本的儲存方式是順序儲存方式和連結儲存方式。

更多10條

c語言中關於字串長度的問題

14樓:幻形術

char str; //這是錯誤的,沒有初始化列表時必須指定陣列長度。

char str[10]; //指定了長度為10,不過沒有初始化,所以10個元素值是偽隨機值

char str[10] = ; //指定了長度為10,對每個元素都初始化了

char str[10] = ; //指定了長度為10,顯示初始化了前面幾個元素,後面的元素預設為0

char str = ; //沒有指定長度,但有初始化列表,陣列長度由初始化列表元素個數決定,所以長度是10

15樓:

不,若不在填數字,就必須在初始化這個str,在等號右邊寫具體資料,有幾個資料,編譯器就自動在中填幾了。所以char str這樣寫是錯誤的,要寫成char str=;這樣的形式,編譯器就會認為中是3了。另,char型陣列還可以char str="1234567";這樣來定義,但這時中並不是7而是8,原來編譯器把str作為字串對待了,要在7後自動加一個結束符'\0'。

16樓:戈恆史樂

1.a2.b

3.\034

表示八進位制34所代表的ascii碼字元

4.\\

表示一個\

5.\x79

表示16進位制79所代表的ascii碼字元

所以長度為5

1.a2.\045

ascii碼為八進位制45的字元

3.空格

4.05.4

6.57.\'

表示一個單引號8.b

17樓:璩楚華橋

第1個輸出是8

10。sizeof運算子得到的是陣列的佔用位元組的大小,在定義陣列a的時候沒有指明大小,編譯器根據初始化的內容來決定a的大小,"abcdefg"是個字串,連同表示字串結束的'\0'共有8個字元,1個字元型別佔用1個位元組,所以sizeof(a)是8。在定義陣列b的時候已經指明瞭大小,所以sizeof(b)是10。

第2個輸出是5

20。strlen函式是計算字串的長度,字串以'\0'表示結束,所以strlen在遇到hello後面的'\0'時就會返回。sizeof跟第1個問題一樣。

18樓:

錯誤有兩個!

1.char型的字元變數a只代表一個字元,不能代表一個字串。

2.用scanf輸入字串時,出了個控制符要用%s外,後面的應是個地址。若a是個字元陣列,應該用a,而不是&a。況且用scanf輸入時不能輸入空格。

你可以這樣編:

#include

#include

void main()

visual c++編譯通過,希望能幫助你

19樓:匿名使用者

你的**出現問題的原因是scanf("%s",&a); ,a是一個char型別的變數,系統為它分配了一個位元組的記憶體空間,但是你卻輸入了一個字串到以a的地址為首地址的一段連續的記憶體空間裡,這樣就出現了越界錯誤.但是printf函式並不檢查越界錯誤,它會按正常的方法執行,然後程式統計出長度,列印出來結果.但是返回到呼叫main函式的作業系統後,系統會發現越界錯誤,所以在結果顯示出來後才出錯.

至於你說的輸入5個以下不會出錯,也許是偶然,也許跟你的編譯器有關.我用vs2005測試,只要輸入就會出錯。

如果你是隻想求出輸入的字串的長度而不要求儲存輸入的字串,下面的**更好。你的標準輸入緩衝區有多大,那麼它就可以求出多長的字串的長度,不會有越界。

#include

int main()

20樓:

#include

main() 這樣

21樓:在太平塔笨豬跳的三角楓

#include

main()

編譯通過.

c語言中怎樣判斷字串的長度問題啊

22樓:匿名使用者

本題的輸出結果是9 我給你總結這樣的題型。1首先你要知道轉義字元,如\n \t \\ \ddd 等這些屬於轉義字元,只佔一個字串的長度。2.

還有就是\101代表ascii碼的為101的字元'a',記住\376 以內的都佔一個字串長度,他們都代表ascii中的某個字母,數字,或亂碼。 希望你看對以後這樣的題都做滿分

23樓:匿名使用者

答案是9首先我們來分析一下,\\是一個,1,4,1是3個,已經4個了,\141是一個,5個了,a,b,c是3個,總共8個了,最後\t是一個,總共9個。 該怎麼做?首先要特別注意\這個轉義字元,後面跟著的和它組成一個字元,在上面這道題上最主要的是\141很有迷惑性,這'\141'表示的是字元'a',它是以3位8進駐的ascii碼錶示的,所以以後做題時要注意\後面的字元和3位數字,其實他們表示的是一個字元而已。

字串長度的定義

24樓:吧狂吊絲

字串長度是指字串所含的字元個數,但不包括最後的'\0'。

c語言的字串是由字元陣列形式儲存的,並約定'\0'(ascii碼值為0)作為字串結束符。其長度為從字串開始,到'\0'結束,所有字元的個數,不包括'\0'本身。

關鍵在於c字串有個結尾0, 處理時需要注意.

定義字串長度有兩種方式, 一種是用字串的大小, 一種是字串的長度.

字串的大小即記憶體空間的大小, 而串長度加1才是所需空間.

正確:char str[max_size];

char str[max_len + 1];

錯誤:char str[max_size + 1];

char str[max_len];

擴充套件資料

字串主要用於程式設計,概念說明、函式解釋、用法詳述見正文,這裡補充一點:字串在儲存上類似字元陣列,所以它每一位的單個元素都是可以提取的。

如s=「abcdefghij」,則s[1]=「a」,s[10]="j",而字串的零位正是它的長度,如s[0]=10(※上述功能ansistring沒有。),這可以給我們提供很多方便,如高精度運算時每一位都可以轉化為數字存入陣列。

字串或串(string)是由數字、字母、下劃線組成的一串字元。一般記為 s=「a1a2···an」(n>=0)。它是程式語言中表示文字的資料型別。

在程式設計中,字串(string)為符號或數值的一個連續序列,如符號串(一串字元)或二進位制數字串(一串二進位制數字)。

通常以串的整體作為操作物件,如:在串中查詢某個子串、求取一個子串、在串的某個位置上插入一個子串以及刪除一個子串等。兩個字串相等的充要條件是:

長度相等,並且各個對應位置上的字元都相等。

設p、q是兩個串,求q在p中首次出現的位置的運算叫做模式匹配。串的兩種最基本的儲存方式是順序儲存方式和連結儲存方式。

輸入若干字串,按字串長度由小到大重新排序輸出 使用指標陣列處理

輸入五個字串,然後按字串長度從小到大排序,先把源程式複製一下,char string 5 定義了指標陣列。include include include int main for i 0 i 5 i printf nbefore sort n for i 0 i 5 i for i 0 i 5 i ...

C語言求字串中最長單詞的長度問題

文字 include stdio.h define n 1000 int main int argc,char argv char s n 1 ch int k,t,n printf enter a text.n for n 0 nif ch getchar n break s n ch s n 0...

字串的問題

直接使用 tempdefault str 的意思就是 tempdefault str 0 strtail tempdefault str 這樣寫就等於是strtail tempdefault str 0 原因是 strhead,strtail這兩個指標用的不對,也就是你取的地址是不對的,自然後面的s...