《c和指標》(四)

2021-07-23 02:27:41 字數 2070 閱讀 7083

一、字串長度

1、標準庫函式:size_t strlen(char const *string) ; 標頭檔案:string.h, size_t 定義在stddef.h中,是無符號整型。

2、字串長度的比較:

方案一: if (strlen(x) >= strlen(y))

方案二:if (strlen(x) - strlen(y) >= 0)

方案一是正確的。方案二會出現問題,它的條件永遠為真,因為strlen的返回值是無符號的,兩個無符號的整型相減,結果還是無符號的。如果判斷表示式中既有無符號也有有符號的,例如下面兩個方案:

方案一:if (strlen(x) >= 10)

方案二:if (strlen(x) - 10 >= 0)

同樣,方案一是正確的。方案二會出現一些問題,在方案二中,將strlen的返回值強制轉換為int再參與表示式運算可以消除這個問題。

二、字串複製、連線、比較庫函式

1、長度不受限的字串函式 strcpy、strcat、strcmp,注意strcpy(char *dst, char const *src)和strcat(char *dst, char const *src), 當dst和src指向的記憶體區域出現重疊時,其結果是未定義的,因此,要保證dst指向的記憶體區域可以儲存的下結果。

2、長度受限的字串庫函式 strncpy(char *dst,char const *src, size_t len), strncat(char *dst, char const *src, size_t len), strncmp(char *dst, char const *src, size_t len)

三、字串查詢函式

1、查詢乙個字元

strchr(char const *src, int ch);查詢字元ch 在src中第一次出現的位置,若無,返回null

strrchr(char const *src, int ch);查詢字元ch 在src中最後一次出現的位置,若無,返回null

2、查詢字符集中的任一字元並返回其第一次出現的位置,strpbrk(char const *src, char const *group),若無,返回null。

3、查詢子串str在src中第一次完整出現的位置,strstr(char const *src, char const *str), 若無,返回null;若str為空字串,返回src。

注:在標準庫中並沒有strrpbrk和strrstr,如有需要自己實現,可以在函式內部呼叫strpbrk和strstr實現。

四、高階字串查詢

1、size_t strspn(char const *str, char const *group); 返回str起始部分匹配group中任意字元的字元個數,如果str中的某乙個字元沒有出現在group中,查詢結束。該函式可用於查詢str字串中第乙個非group中的字元的位置,str + 返回值即可求出。

size_t strcspn(char const *str, char const *group); 返回str起始部分不匹配group中任意字元的字元個數,直到匹配到任意乙個group中指定的字元結束。該函式可用於查詢str字串中所有的非group中的字元。

2、分隔字串:char *strtok(char *str, char const *sep); 其中,sep指向乙個字串,它可以是很多分隔符的集合。注意一點:該函式會修改原字串str。

五、char *strerror(int error_num);將乙個錯誤碼轉換為字串資訊。

六、記憶體操作函式,可以處理任意位元組序列,不僅僅限於以null結尾的字串

memcpy、memmove、memcmp、memchr(注:該函式可以在乙個位元組序列中查詢乙個特定的值)、memset

1、這些函式的原型都指定了需要操作的位元組數,注意,是位元組數,如果是多位元組資料,則要乘以資料長度。

2、在使用memcpy時,源位址如果與目的位址重疊,則結果為定義;

memmove相比memcpy可以正確處理源位址如果與目的位址重疊的情況,因為memmove的實現利用了臨時位置,這個臨時位置可以保證源與目的位址不重疊,但是它的速度可能會比memcpy慢一些。

C 指標和引用(四)

指標和引用 用指標處理鍊錶 一 鍊錶概述 鍊錶是由乙個個結點組成,每乙個結點是乙個結構體型別的變數,各個結點的型別相同,但其位址不一定連續。具體結點的個數根據需要動態開闢。每個結點由兩部分組成,第一部分放若干資料,第二部分是指標變數,放下一結點的位址。煉表頭是一指標變數,放第乙個結點的位址,若結點的...

《c和指標》之總結 四

6 指標 計算機記憶體中的每個位置都由乙個位址標識。通常,鄰近的記憶體位置合成一組,這樣就允許儲存更大範圍的值。指標就是它的值表示記憶體位址變數。無論是程式設計師還是計算機都無法通過值的位模式來判斷它的型別。型別是通過值的使用方法隱式地確定的。編譯器能夠保證值的宣告和值的使用之間的關係是適當的,從而...

C指標基礎(四)

這篇文章我們來一起討論一下指標與陣列。指標與陣列密不可分,但是絕不能將二者混為一談。我們可以用陣列的名字作為指向陣列第乙個元素的指標。因此通常情況下,a i等同於 a i a i 等同於a i 其中a是陣列名。於是我們可以這樣操作 int a 100 a 7 陣列第乙個元素賦值7 a 2 4 陣列第...