標頭檔案中定義了兩組字串函式。第一組函式的名字以 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 函...