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,...