c語言標準庫詳解(七) 字串函式string h

2021-10-05 14:08:07 字數 3733 閱讀 6557

標頭檔案中定義了兩組字串函式。第一組函式的名字以 str 開頭;第二組函式的名字以 mem 開頭。除函式 memmove 外,其它函式都沒有定義重疊物件間的複製行為。比較函式將把引數作為 unsigned char 型別的陣列看待。

在下表中,變數 s 和 t 的型別為 char *;cs 和 ct 的型別為 const char *;n 的型別為 size_t;c 的型別為 int(將被轉換為 char 型別)。

函式名功能

char *strcpy(s,ct)

將字串 ct(包括』\0』)複製到字串 s 中,並返回 s

char *strncpy(s,ct,n)

將字串 ct 中最多 n 個字元複製到字串 s 中,並返回 s。如果 ct 中少於 n 個字元,則用』\0』填充

char *strcat(s,ct)

將字串 ct 連線到 s 的尾部,並返回 s

char *strncat(s,ct,n)

將字串 ct 中最多前 n 個字元連線到字串 s 的尾部,並以』\0』結束;該函式返回 s

int strcmp(cs,ct)

比較字串 cs 和 ct;當 csct 時,返回乙個正數

int strncmp(cs,ct,n)

將字串 cs 中至多前 n個字元與字串 ct 相比較。當 csct 時,返回乙個正數

char *strchr(cs,c)

返回指向字元 c 在字串 cs 中第一次出現的位置的指標;如果 cs 中不包含 c,則該函式返回 null

char *strrchr(cs,c)

返回指向字元 c 在字串 cs 中最後一次出現的位置的指標;如果 cs 中不包含 c,則該函式返回 null

size_t strspn(cs,ct)

返回字串 cs 中包含 ct 中的字元的字首的長度

size_t strcspn(cs,ct)

返回字串 cs 中不包含 ct 中的字元的字首的長度

char *strpbrk(cs,ct)

返回乙個指標,它指向字串 ct 中的任意字元第一次出現在字串 cs 中的位置;如果 cs 中沒有與 ct 相同的字元,則返回 null

char *strstr(cs,ct)

返回乙個指標,它指向字串 ct 第一次出現在字串 cs 中的位置;如果 cs 中不包含字串 ct,則返回 null

size_t strlen(cs)

返回字串 cs 的長度

char *strerror(n)

退回乙個指標,它指向與錯誤編號 n 對應的錯誤資訊字串(錯誤資訊的具體內容與具體實現相關)

char *strtok(s,ct)

strtok函式在s中搜尋由ct中的字元界定的記號。詳細資訊參見下面的討論

對 strtok(s, ct)進行一系列呼叫,可以把字串 s 分成許多記號,這些記號以 ct 中的字元為分界符。第一次呼叫時,s 為非空。它搜尋 s,找到不包含 ct 中字元的第乙個記號,將 s 中的下乙個字元替換為』\0』,並返回指向記號的指標。隨後,每次呼叫 strtok 函式時(由 s 的值是否為 null 指示),均返回下乙個不包含 ct 中字元的記號。當 s 中沒有這樣的記號時,返回 null。每次呼叫時字串 ct 可以不同。

特別要注意分割處理後原字串 str 會變,變成第乙個子字串

說白了,這個函式有狀態

示例(除strtok外):

#include

#include

void

printstr

(char

* src)

printf

("\n");

}int

main()

輸出:

&'c:\users\swy\.vscode\extensions\ms-vscode.cpptools-0.27.0\debugadapters\bin\windowsdebuglauncher.exe'

'--stdin=microsoft-miengine-in-qgzcdwvk.gxf'

'--stdout=microsoft-miengine-out-wj0yyhuh.y4x'

'--stderr=microsoft-miengine-error-kyu4s343.tmb'

'--pid=microsoft-miengine-pid-unlymjir.kfu'

'--dbgexe=g:\x86_64-8.1.0-release-posix-sjlj-rt_v6-rev0\mingw64\bin\gdb.exe'

'--interpreter=mi'

make america great again!

cnn fake news!

cnn famerica great again!

cnn famerica great again!cnn fake news!-10

a7163

39示例(strtok):

#include

#include

int main (

)printf

("\n%s\n"

,str)

;return(0

);}

輸出:

&'c:\users\swy\.vscode\extensions\ms-vscode.cpptools-0.27.0\debugadapters\bin\windowsdebuglauncher.exe'

'--stdin=microsoft-miengine-in-xns41bft.qby'

'--stdout=microsoft-miengine-out-w212wzzk.mpb'

'--stderr=microsoft-miengine-error-b1wdpiu5.l2i'

'--pid=microsoft-miengine-pid-ojoy1rfn.zmg'

'--dbgexe=g:\x86_64-8.1.0-release-posix-sjlj-rt_v6-rev0\mingw64\bin\gdb.exe'

'--interpreter=mi'

this is a fan of

quentin

tarantino

this is a fan of

以 mem 開頭的函式按照字元陣列的方式操作物件,其主要目的是提供乙個高效的函式介面。在下表列出的函式中,s 和 t 的型別均為 void * , cs 和 ct 的型別均為 const void * ,n 的型別為 size_t,c 的型別為 int(將被轉換為 unsigned char 型別)

函式名功能

void *memcpy(s,ct,n)

將字串 ct 中的 n 個字元拷貝到 s 中,並返回 s

void *memmove(s,ct,n)

該函式的功能與 memcpy 相似,所不同的是,當物件重疊時,該函式仍能正確執行

int memcmp(cs,ct,n)

將 cs 的前 n 個字元與 ct 進行比較,其返回值與 strcmp的返回值相同

void *memchr(cs,c,n)

返回乙個指標,它指向 c 在 cs 中第一次出現的位置。如果 cs 的前 n 個字元中找不到匹配,則返回 null

void *memset(s,c,n)

將 s 中的前 n 個字元替換為 c,並返回 s

示例與前面差不多,就不寫了⑧

C語言標準庫概覽詳述 10 字串

char strcpy char str1,const char str2 把字串str2 包括 0 拷貝到字串str1當中,並返回str1。char strncpy char str1,const char str2,size t count 把字串str2中最多count個字元拷貝到字串str1...

標準C語言字串函式

c語言包含標頭檔案 include include 在c 中也可以使用這些函式,包含的標頭檔案為 include cstring是c 對string.h的簡略公升級與包裝,並將它放置在命名空間std下。cstring裡的內容與方法,應該與c標準庫下的string.h一致。功 能 計算字串s的長度,不...

C語言 3 字串

字元陣列 char 看做乙個特殊的字元陣列,在字串結束為止新增 0 結束符 ascii碼0 沒有 0結尾的是普通的字元陣列。使用雙引號定義的字串自動在尾部加上 0 puts s 函式 輸出記憶體直至遇到 0 陣列變數名代表了陣列位址,例如char s 20 s就是陣列位址,不用 s gets s 函...