C語言標準庫概覽詳述[10]-字符串

在頭文件<string.h>中定義了兩組字符串函數。第一組函數的名字以str開頭;第二組函數的名字以mem開頭。只有函數memmove對重疊對象間的拷貝進行了定義,而其他函數都未定義。比較類函數將其變量視爲unsigned char類型的數組。

10.1 strcpy

char *strcpy(char *str1, const char *str2);

把字符串str2(包括'\0')拷貝到字符串str1當中,並返回str1。

10.2 strncpy

char *strncpy(char *str1, const char *str2, size_t count);

把字符串str2中最多count個字符拷貝到字符串str1中,並返回str1。如果str2中少於count個字符,那麼就用'\0'來填充,直到滿足count個字符爲止。

10.3 strcat

char *strcat(char *str1, const char *str2);

把str2(包括'\0')拷貝到str1的尾部(連接),並返回str1。其中終止原str1的'\0'被str2的第一個字符覆蓋。

10.4 strncat

char *strncat(char *str1, const char *str2, size_t count);

把str2中最多count個字符連接到str1的尾部,並以'\0'終止str1,返回str1。其中終止原str1的'\0'被str2的第一個字符覆蓋。

注意,最大拷貝字符數是count+1。

10.5 strcmp

int strcmp(const char *str1, const char *str2);

按字典順序比較兩個字符串,返回整數值的意義如下:

  • 小於0,str1小於str2;
  • 等於0,str1等於str2;
  • 大於0,str1大於str2;

10.6 strncmp

int strncmp(const char *str1, const char *str2, size_t count);

同strcmp,除了最多比較count個字符。根據比較結果返回的整數值如下:

  • 小於0,str1小於str2;
  • 等於0,str1等於str2;
  • 大於0,str1大於str2;

10.7 strchr

char *strchr(const char *str, int ch);

返回指向字符串str中字符ch第一次出現的位置的指針,如果str中不包含ch,則返回NULL。

10.8 strrchr

#include <string.h> char *strrchr(const char *str, int ch);

返回指向字符串str中字符ch最後一次出現的位置的指針,如果str中不包含ch,則返回NULL。

10.9 strspn

size_t strspn(const char *str1, const char *str2);

返回字符串str1中由字符串str2中字符構成的第一個子串的長度。

10.10 strcspn

size_t strcspn(const char *str1, const char *str2);

返回字符串str1中由不在字符串str2中字符構成的第一個子串的長度。

10.11 strpbrk

char *strpbrk(const char *str1, const char *str2);

返回指向字符串str2中的任意字符第一次出現在字符串str1中的位置的指針;如果str1中沒有與str2相同的字符,那麼返回NULL。

10.12 strstr

char *strstr(const char *str1, const char *str2);

返回指向字符串str2第一次出現在字符串str1中的位置的指針;如果str1中不包含str2,則返回NULL。

10.13 strlen

size_t strlen(const char *str);

返回字符串str的長度,'\0'不算在內。

10.14 strerror

char *strerror(int errnum);

返回指向與錯誤序號errnum對應的錯誤信息字符串的指針(錯誤信息的具體內容依賴於實現)。

10.15 strtok

char *strtok(char *str1, const char *str2);

在str1中搜索由str2中的分界符界定的單詞。

對strtok()的一系列調用將把字符串str1分成許多單詞,這些單詞以str2中的字符爲分界符。第一次調用時str1非空,它搜索str1,找出由非str2中的字符組成的第一個單詞,將str1中的下一個字符替換爲'\0',並返回指向單詞的指針。隨後的每次strtok()調用(參數str1用NULL代替),均從前一次結束的位置之後開始,返回下一個由非str2中的字符組成的單詞。當str1中沒有這樣的單詞時返回NULL。每次調用時字符串str2可以不同。

如:

char *p; p = strtok("The summer soldier,the sunshine patriot", " "); printf("%s", p); do { p = strtok("\0", ", "); /* 此處str2是逗號和空格 */ if (p) printf("|%s", p); } while (p);

顯示結果是:The | summer | soldier | the | sunshine | patriot

10.16 memcpy

void *memcpy(void *to, const void *from, size_t count);

把from中的count個字符拷貝到to中。並返回to。

10.17 memmove

void *memmove(void *to, const void *from, size_t count);

功能與memcpy類似,不同之處在於,當發生對象重疊時,函數仍能正確執行。

10.18 memcmp

int memcmp(const void *buf1, const void *buf2, size_t count);

比較buf1和buf2的前count個字符,返回值與strcmp的返回值相同。

10.19 memchr

void *memchr(const void *buffer, int ch, size_t count);

返回指向ch在buffer中第一次出現的位置指針,如果在buffer的前count個字符當中找不到匹配,則返回NULL。

10.20 memset

void *memset(void *buf, int ch, size_t count);

把buf中的前count個字符替換爲ch,並返回buf。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章