c語言中關於字串的一些常規處理

2021-06-13 04:31:34 字數 2756 閱讀 1353

c語言中的字串操作:

1、初始化字串:

#include

void *memset (void *s, int c, size_t n);

memset函式把s所指的記憶體位址開始的n個位元組都填充為c的值。通常c的值為0,把一塊記憶體區清零。例如定義char buf[10];,如果它是全域性變數或靜態變數,則自動初始化為0(bss段),如果它是函式的區域性變數,則初值不確定,可以用memset(buf, 0, 10)清零,由malloc分配的記憶體初值也是不確定的,也可以用memset清零。

2、取字串的長度

#include

size t strlen (const char *s);

strlen函式返回s所指的字串的長度。該函式從s所指的第乙個字元開始找'\0'字元,一旦找到就返回,返回的長度不包括'\0'字元在內。例如定義char buf = "hello";,則strlen(buf)的值是5,但要注意,如果定義char buf[5] = "hello";,則呼叫strlen(buf)是危險的,會造成陣列訪問越界。

3、拷貝字串

#include

strcpy

如果源長》目標長,則將源長中等於目標長的字元拷貝到目標字串

如果源長《目標長,則源長全部拷貝到目標字串,不包括'\0'

strncpy

如果目標長》指定長》源長,則將源長全部拷貝到目標長,自動加上'\0'

如果指定長《源長,則將源長中按指定長度拷貝到目標字串,不包括'\0'

void *memcpy(void *dest, const void *src, size_t n);

memcpy函式從src所指的記憶體位址拷貝n個位元組到dest所指的記憶體位址,和strncpy不同,memcpy並不是遇到'\0'就結束,而是一定會拷貝完n個位元組。這裡的命名規律是,以str開頭的函式處理以'\0'結尾的字串,而以mem開頭的函式則不關心'\0'字元,或者說這些函式並不把引數當字串看待,因此引數的指標型別是void *而非char *。

void *memmove(void *dest, const void *src, size_t n);

memmove也是從src所指的記憶體位址拷貝n個位元組到dest所指的記憶體位址,雖然叫move但其實也是拷貝而非移動。但是和memcpy有一點不同,memcpy的兩個引數src和dest所指的記憶體區間如果重疊則無法保證正確拷貝,而memmove卻可以正確拷貝。假設定義了乙個陣列char buf[20] = "helloworld\n";,如果想把其中的字串往後移動乙個位元組(變成"hhello world\n"),呼叫memcpy(buf+ 1, buf, 13)是無法保證正確拷貝的:

4、連線字串

include

char *strcat(char *dest, const char *src);

strcat把src所指的字串連線到dest所指的字串後面

char *strncat(char *dest, const char *src, size_t n);

strncat把src所指的n個字串連線到dest所指的字串後面

5、比較字串

#include

int memcmp(const void *s1, const void *s2, size_t n);

memcmp從前到後逐個比較緩衝區s1和s2的前n個位元組(不管裡面有沒有'\0'),如果s1和s2的前n個位元組全都一樣就返回0,如果遇到不一樣的位元組,s1的位元組比s2小就返回負值,s1的位元組比s2大就返回正值。

int strcmp(const char *s1, const char *s2);

strcmp把s1和s2當字串比較,在其中乙個字串中遇到'\0'時結束,按照上面的比較準則,"abc"比"abc"小,"abcd"比"abc"大,"123a9"比"123b2"小。

int strncmp(const char *s1, const char *s2, size_t n);

strncmp的比較結束條件是:要麼在其中乙個字串中遇到'\0'結束(類似於strcmp),要麼比較完n個字元結束(類似於memcmp)。例如,strncmp("abcd", "abc", 3)的返回值是0,strncmp("abcd", "abc", 4)的返回值是正值。

上面的返回值:負值表示s1小於s2,0表示s1等於s2,正值表示s1大於s2

6、搜尋字串

#include

char *strchr(const char *s, int c);

strchr在字串s中從前到後查詢字元c,找到字元c第一次出現的位置時就返回,返回值指向這個位置,如果找不到字元c就返回null

char *strrchr(const char *s, int c);

和上面的一樣,只不過查詢順序反向了;函式名中間多了乙個字母r可以理解為reverse

char *strstr(const char *haystack, const char *needle);

strstr在乙個長字串中從前到後找乙個子串(substring),找到子串第一次出現的位置就返回,返回值指向子串的開頭,如果找不到就返回null。這兩個引數名很形象,在乾草堆haystack中找一根針needle,按中文的說法叫大海撈針,顯然haystack是長字串,needle是要找的子串。

7、分割字串

#include

char *strtok(char *str, const char *delim);

引數str是待分割的字串,delim是分隔符,可以指定乙個或多個分隔符,strtok遇到其中任何乙個分隔符就會分割字串

C語言中關於字串的一些常用函式

使用以下時應當在標頭檔案中加入string.h getch 為當你鍵入任何乙個值時,返回但是並不顯示,立馬編譯結束,返回的是asc碼 getchar 當你鍵入回車之後才算是輸入結束,並且可以用putchar 顯示第乙個字元,返回的是asc碼 puts 將乙個字串 僅乙個 輸出到終端,可以包含轉義符 ...

關於字串的一些。。。

首先呼叫這些函式需要使用標頭檔案include 1 des src abcd xyz abcdxyz char mystrcat char des,const char src 字串連線 2 字串比較 0,0,0 int mystrcmp const char str1,const char str...

一些關於字串的函式

函式名 stpcpy 功 能 拷貝乙個字串到另乙個 用 法 char stpcpy char destin,char source 程式例 include include int main void 函式名 strcat 功 能 字串拼接函式 用 法 char strcat char destin,...