1. 程式人生 > >C語言--“string.h”庫的幾個函式

C語言--“string.h”庫的幾個函式

標頭檔案:#include<string.h>

string .h 標頭檔案定義了一個變數型別、一個巨集和各種操作字元陣列的函式。

1,變數型別size_t

這是無符號整數型別,它是 sizeof 關鍵字的結果。

2,巨集定義NULL

這個巨集是一個空指標常量的值。

3,各種庫函式

(1),strdup()

功能:將串拷貝到新建的位置處

用法:char * strdup(char *str);

strdup()函式原型:

strdup()主要是拷貝字串s的一個副本,由函式返回值返回,這個副本有自己的記憶體空間,和S不相干。strdup()函式複製一個字串,使用完後記得刪除在函式中動態申請的記憶體。strdup()函式的引數不能為NULL,否則報錯。因為該函式包含了strlen()函式,而該函式引數不能是NULL。

(2) strtok()

strtok函式的作用是把字串以規定的字元分割開

p = strtok(buf, "$");  
p為指標,buf也是指標,這句程式碼的意思就是把buf中的字串以"$"為分隔符分割開來,分割出來的字串儲存到指標p中。

再次呼叫strtok函式時,把buf換成NULL,不需要再寫buf。即:

p = strtok(NULL, "$");  

需要注意的是,strtok函式會把分割前的字串破壞掉,即每次分割後,原來的字串就會少掉一部分,完整性會被破壞。

strtok函式的分隔字元還可以是多個,不一定只為一個

p = strtok(buf, "$,");   

這句程式碼的意思是以"$"和","為分隔符分割buf中的字串。每當遇到這兩個字元其中一個都會分割,不是遇到"$,"兩個字元連在一起才分割,記住只需要遇到其中一個字元就可以了

(3)getline()

ssize_t getline(char **linepter,size_t *n,FILE *stream);

getline函式可以獲取檔案中的一行資料。

返回型別ssize_t為有符號整形,其值為獲取的字元數,檔案結束則返回-1,包括換行符’\n’,但不包括字串結束符’\0’。linepter用來儲存獲得的字串,size_t為無符號整形表示linepter的位元組數。當*linepter為空時函式則動態為其分配空間,注意要將size_t值賦0。當linepter的空間不足時,函式會通過realloc,重新分配更大的空間。stream為檔案指標,用於讀取檔案。

舉個例子,在Linux命令列輸入一行資料,將其儲存下來:

size_t line_size = 100;

char * line = (char*) malloc(sizeof(char)*line_size);

getline(&line, &line_size, stdin);(注意前兩個引數的取地址符)