天天看點

字元串中的轉義字元與字元串的長度

提示:

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

(2)一個轉義字元總是以反斜杠開始,再加一個其他字元組成。是以,遇到反斜杠時要特别注意!!!

示例:

1、不帶轉義字元的字元串

  如:“abc!x=/”,strlen求其長度為 7,但是因為字元串在末尾還有一個終止符‘\0’,是以字元串占8個位元組,長度為8.

2、帶轉義字元的字元串

  (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求字元串長度是是不計算末尾的終止符的,但是字元串所占的位元組數是包括終止符。

例題一:[1995年二級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'(換行符)。

例題二:[1998年二級C筆試選擇題(44)]

若有以下程式段:

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

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