轉義字元的長度是不是字元長度,乙個轉義字元的長度是不是乙個字元長度?

2021-03-21 23:26:09 字數 5415 閱讀 8827

1樓:

1.計算字串長度時關鍵是要注意辨認轉義字元;

2.乙個轉義字元總是以反斜槓開始,再加乙個其他字元組成。所以,遇到反斜槓時要特別注意!!!

示例:3.不帶轉義字元的字串

如:「abc!x=/」,strlen求其長度為 7,但是因為字串在末尾還有乙個終止符『\0』,因此字串佔8個位元組,長度為8.

4.帶轉義字元的字串

(1) 字串「abc\n」:其中的'\n'為轉義字元(換行符),計算字串長度時只能計作乙個字元,所以該字串的長度為5(而不是6)

(2) 字串「abc\n\\\'\"":其中有4個轉義字元:'\n'(換行符)、'\\'(反斜槓)、'\''(單引號)、'\"'(雙引號),所以該字串的長度為8(而不是12)。

(3) 字串「abc\0xyz」:其中有乙個轉義字元'\0',它是字串結束符,所以,當用函式strlen來測試該字串的長度時,結果應該為4(而不是8)。

(4) 字串「abc\\0xy」:其中有乙個轉義字元'\\'(反斜槓),這樣,後面的字串「0xy」照樣計算,所以,該字串的長度為7(而不是將第二個反斜槓與其後的0結合為乙個轉義字元'\0',若那樣的話,第乙個反斜槓將無法處理,因為乙個轉義字元總是由反斜槓加其他字元組成的,單獨的乙個反斜槓不能作為任何合法的字元)。

(5) 若將字串「abc\\0xy」改為「abc\\\0xy」:則其中有二個轉義字元'\\'(反斜槓)和'\0'(字串結束符),這時,當用函式strlen來測試該字串的長度時,結果應該為5(而不是8)。

(6) 若將字串「abc\\\0xy」改為「abc\\\061xy」:則其中有二個轉義字元'\\'(反斜槓)和'\061'(ascii碼值等於061的字元,也即數字字元'1'),這時,當用函式strlen來測試該字串的長度時,結果應該為7(而不是4或9)。所以,當遇到轉義字元'\0'時,還要看其後面是否還有數字,若有,則應將後面的數字(一至二位)與前面的'\0'相結合作為乙個字元計入整個字串的長度。

若用printf(「abc\\\061xy」);輸出,則輸出結果為:abc\1xy

注意使用strlen求字串長度是是不計算末尾的終止符的,但是字串所佔的位元組數是包括終止符。

例題一:[2023年二級c筆試選擇題(26)]

請選出以下語句的輸出結果(  )

printf("%d\n",strlen("\t\"\065\xff\n"));

(a) 5  (b) 14  (c) 8  (d) 輸出項不合法,無正常輸出

正確答案是(a):字串中包含的5個字元是:'\t'(跳格符)、'\"'(雙引號)、'\065'(ascii值為八進位制065,也即十進位制為51的字元)、'\xff'(ascii值為十六進位制ff,也即十進位制為255的字元)、'\n'(換行符)。

例題二:[2023年二級c筆試選擇題(44)]

若有以下程式段:

char str="ab\n\012\\\"";

printf("%d",strlen(str));

上面程式段的輸出結果是

a) 3 b) 4 c) 6  d) 12

正確答案是(c):字串中包含的6個字元是:'a'、'b'、'\n'、'\012'、'\\'和'\"'。如果這一問題是問字串的長度,則為7。

2樓:匿名使用者

是的,轉義字元和普通字元一樣,都是佔用乙個位元組的空間。

3樓:匿名使用者

有的都寫錯了好吧 strlen不計\0

4樓:落空

我測試過,轉義字元'\n'等等包括斜槓是佔用乙個字元的

5樓:大蘊不解釋

strlen測長度是不算「\0」的!

c語言 計算字串長度

6樓:

作者你好!

首先要分清楚:字元陣列和字串的關係!

字串存放在陣列中,因此,乙個字元陣列可以存放幾個串,單字串函式只認字串結束標誌'\0';

1. strlen(wer wer):字串為"wer_wer"這種字串常量,系統會在其後自動補上'\0';而求字串長度的函式strlen()只要遇見'\0';就返回函式值!

而且'\0'不算在其中!故返回值為7(空格也算乙個字元!)

2. strlen(wer\0wer) 其中的字串為"wer\0wer"而strlen函式遇到'\0'即結束,故返回值為:3

3. '\0'不是空格,也不是回車!通過ascii碼表,你可知道,'\0'是ascii碼值代表0(null);而空格的ascii碼為:

'\32' 32 回車的ascii碼值為'\13' 13

希望對你有所幫助!!!!

7樓:

c語言計算字串長度,可以手動計算也可以使用庫函式或者sizeof()操作符。

方法:自定義函式求長度

使用strlen()函式

使用sizeof()操作符

int cont_str(char *s)

strlen(str); //假設str為待求的字串陣列名

sizeof(str)/sizeof(str[0]); //假設str為待求的字串陣列名

strlen()函式求出的字串長度為有效長度,既不包含字串末尾結束符 『\0』;

sizeof()操作符求出的長度包含字串末尾的結束符 『\0』;

當在函式內部使用sizeof()求解由函式的形參傳入的字元陣列的長度時,得到的結果為指標的長度,既對應變數的位元組數,而不是字串的長度,此處一定要小心。

8樓:溜溜達達

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

要獲得字串長度,有兩種方法可以使用,使用庫函式strlen()。strlen宣告在string.h中,原型為int strlen(char *str);功能為求str的長度,並返回。

對於字串str, 可以用**求長度。當str[len]為0時,退出迴圈,退出後的len值就是str的長度。

拓展資料:使用strlen函式,包含在標頭檔案string.h裡,功能就是計算字串s的(unsigned int型)不包括'\0'在內的長度。

9樓:冰是沉默的水

計算長度有兩個函式:strlen sizeofstrlen 計算字串裡面一共有多少個字元sizeof 計算字串佔的總記憶體空間

如:char str[20]=;

strlen(str);等於 6

sizeof(str); 等於20

-物聯網校企聯盟技術部

10樓:樂跑小子

#include

#include

void main()

執行結果

input string

abcdefgh

你輸入的字串的長度為8

press any key to continue

11樓:匿名使用者

c語言中測試字串長度的函式是strlen()函式原型:

unsigned int strlen (char *s);

標頭檔案:

#include

引數說明:s為指定的字串;

功能說明:strlen()用來計算指定的字串s 的長度,不包括結束字元'\0';

返回值:返回字串s 的字元數;

注意:strlen() 函式計算的是字串的實際長度,遇到第乙個'\0'結束。

示例:#include

#include

int main()

//輸出結果:strlen(str)=6

12樓:烈焰呼嚎

int strlenown(const char* psz) /*const使得字元陣列不被修改*/

這裡面psz++是指標的位移操作,移動指向位置的,字串常量對於c語言來說就是一種陣列嘛

而括號外面的「 * 」是解引用符號,其實意思就是取指標當前位置的值,而不是它的位址。

13樓:匿名使用者

#include

int strlen(char* s)

int main()

14樓:東江湖の水怪

在標頭檔案位置寫

#include

然後在後面用b=strlen(a);

b是乙個int型的變數 a是字串或者字元陣列得首位址,也就是名字比如a[20],

15樓:啊黑夜傳說啊

就用了乙個strlen函式

#include

#include

int main()

16樓:匿名使用者

/*filename的長度為 : 21

press any key to continue*/#include

int strlen(char s)

int main()

17樓:匿名使用者

加標頭檔案 string.h **如下:

char str = "hello world!";

int len = strlen(str);

18樓:匿名使用者

#include

main() 這樣

19樓:匿名使用者

你的if中的條件寫的有問題,應改為

if(c>='a'&&c<='z'||c>='a'&&c<='z')

這樣說明只有你輸入的是字母時,a的值才執行++操作。而你的條件c&&('a'<='z'&&'a'<='z'))後半部分('a'<='z'&&'a'<='z'))返回值永遠都是真,因為a和a永遠都比z和z小呀。前半部分的c是你輸入的值,如果不是輸入了0對應的ascii碼值48,那也永遠是真,所以a條件總是成立,a總是++;結果當然就會不對了

20樓:匿名使用者

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

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

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

#include

int main()

C 中長度大小的問題!!C語言 字串長度問題!

這個涉及到結構體的記憶體對齊問題。一 結構體變數中成員的偏移量必須是成員大小的整數倍 0被認為是任何數的整數倍 二 結構體大小必須是所有成員大小的整數倍。1,首先對於結構體test。float佔4個位元組,char name 10 相當於2個節位元組,再加乙個2位元組。由於剩下的2位元組不足乙個fl...

位元組數,字串長度,字元個數有哪些區別

對於大多數程式設計開發者抄來說,當計算字bai符串的長度時,du腦海中閃現的第乙個函式,默zhi認情況下dao,是指字元的數量,乙個英語字元是乙個長度,乙個漢字是乙個長度。大多數的字串函式,其位置都是針對字元數量的,這使得len函式深入人心,但是,乙個unicode字元,佔用的位元組數量是2byte...

怎麼讓CString的字串長度一樣

1全部if strtemp1.getlength else include include include void strfix char str,int len else memcpy tmp,str xlen len,len end if memcpy str,tmp,ln delete tm...