《C和指標》讀書筆記 8

2021-06-15 07:27:14 字數 2250 閱讀 7553

宣告:該讀書筆記摘抄自《c和指標》——kenneth a.reek (著)    徐波(譯)。為了克服自己走馬觀花,提高閱讀和學習效率,決定將自己在讀書過程中遇到的一些知識點加以摘抄和總結備忘,在此感謝原書作者和翻譯。

一、字串長度

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指標讀書筆記

1.c中變數的儲存型別 儲存型別分為靜態儲存 普通記憶體 堆疊,暫存器自動變數即 塊內部的變數儲存於堆疊,其他變數儲存於普通記憶體即靜態儲存,如果頻繁訪問乙個變數,宣告為暫存器型別後儲存於硬體暫存器中。2.c中實體的鏈結屬性 1 屬於internal鏈結屬性的識別符號在同乙個原始檔內的所有宣告中都指...

C和指標讀書筆記 第8章(陣列)

1.陣列名的值是乙個指標常量,也就是陣列第1個元素的位址,它的型別取決於陣列元素的型別。記住是指標常量。2陣列具有確定數量的元素,指標只是乙個標量值。只有當陣列名在表示式中使用時,編譯器才為它產生乙個指標常量。在程式完成鏈結之後,記憶體中陣列的位置是固定的。3.你不能使用賦值符把乙個陣列的所有元素複...

《C和指標》讀書筆記 6

宣告 該讀書筆記摘抄自 c和指標 kenneth a.reek 著 徐波 譯 為了克服自己走馬觀花,提高閱讀和學習效率,決定將自己在讀書過程中遇到的一些知識點加以摘抄和總結備忘,在此感謝原書作者和翻譯。一 遞迴的兩個特性 1 存在限制條件 2 每次遞迴之後越來越接近限制條件 二 將二進位制數字轉換為...