以 str 起頭的函數作為處理字串之用,另有以 mem 起頭的函數,這些函數則可以進行記憶體區塊的操作。 size_t 作為 sizeof 運算子的回傳型態,實際上可能為 unsigned int 或 unsigned long 。
以下函數可以拷貝字串
函數名稱 | 功能 | 函數原型 |
---|---|---|
strcpy | 將字串 s2 拷貝到 s1 | char *strcpy(char *s1, const char *s2); |
strncpy | 將字串 s2 最多 n 個字元拷貝到 s1 | char *strncpy(char *s1, const char *s2, size_t n); |
以下函數可以將字串相接
函數名稱 | 功能 | 函數原型 |
---|---|---|
strcat | 將字串 s2 接到 s1 的尾端 | char *strcat(char *s1, const char *s2); |
strncat | 將字串 s2 最多 n 個字元接到 s1 的尾端 | char *strncat(char *s1, const char *s2, size_t); |
以下函數測試兩個字串是否相等
函數名稱 | 功能 | 函數原型 |
---|---|---|
strcmp | 比較 s1 與 s2 兩個字串是否相等 | int strcmp(const char *s1, const char *s2); |
strncmp | 比較 s1 與 s2 兩個字串前 n 個字元是否相等 | int strncmp(const char *s1, const char *s2, size_t n); |
以下函數作為字串的搜尋處理之用
函數名稱 | 功能 | 函數原型 |
---|---|---|
strchr | 回傳在字串 s 中,字元 c 第一次出現位置的指標 | char *strchr(const char *s, int c); |
strcspn | 計算經過幾個字元會在字串 s1 中遇到屬於 s2 中的字元 | size_t strcspn(const char *s1, const char *s2); |
strspn | 計算經過幾個字元會在字串 s1 中遇到不屬於 s2 中的字元 | size_t strspn(const char *s1, const char *s2); |
strpbrk | 回傳在字串 s2 中的任何字元在 s1 第一次出現位置的指標 | char *strpbrk(const char *s1, const char *s2); |
strrchr | 回傳在字串 s 中,字元 c 最後一次出現位置的指標 | char *strrchr(const char *s, int c); |
strstr | 回傳在字串 s2 在 s1 第一次出現位置的指標 | char *strstr(const char *s1, const char *s2); |
strtok | 以字串 s2 的內容切割 s1 | char *strtok(char *s1, const char *s2); |
以下函數計算字串的長度
函數名稱 | 功能 | 函數原型 |
---|---|---|
strlen | 計算字串的長度 | size_t strlen(const char *s); |
以下函數為進行記憶體區塊操作之用
函數名稱 | 功能 | 函數原型 |
---|---|---|
memcpy | 從 s2 所指向的資料複製 n 個字元到 s1 | void *memcpy(void *s1, const void *s2, size_t n); |
memmove | 從 s2 所指向的資料複製 n 個字元到 s1 | void *memmove(void *s1, const void *s2, size_t n); |
memcmp | 比較 s1 與 s2 前 n 個字元的資料 | int memcmp(const void *s1, const void *s2, size_t n); |
memchr | 找出字元 c 在 s 前 n 個字元第一次出現的位置 | void *memchr(const void *s, int c, size_t n); |
memset | 將 s 中前 n 個字元全部設定為 c | void *memset(void *s, int c, size_t n); |
您可以繼續參考
字串處理 string.h
- char *strcpy(char *s1, const char *s2);
- char *strncpy(char *s1, const char *s2, size_t n);
- char *strcat(char *s1, const char *s2);
- char *strncat(char *s1, const char *s2, size_t);
- int strcmp(const char *s1, const char *s2);
- int strncmp(const char *s1, const char *s2, size_t n);
- char *strchr(const char *s, int c);
- size_t strcspn(const char *s1, const char *s2);
- size_t strspn(const char *s1, const char *s2);
- char *strpbrk(const char *s1, const char *s2);
- char *strrchr(const char *s, int c);
- char *strstr(const char *s1, const char *s2);
- char *strtok(char *s1, const char *s2);
- size_t strlen(const char *s);
- void *memcpy(void *s1, const void *s2, size_t n);
- void *memmove(void *s1, const void *s2, size_t n);
- int memcmp(const void *s1, const void *s2, size_t n);
- void *memchr(const void *s, int c, size_t n);
- void *memset(void *s, int c, size_t n);
3 則留言:
memcpy的功能說明怎麼跟memmove一樣?
memmove 與 memcpy 的功能幾乎一樣,就不同的程式碼實作出一樣的功能,這裡不打算討論實際差異唷 ^_^
當source與destination記憶體空間有overlap時
其中一個支援有overlap, 另一個不支援
忘了哪一個支援 ...
張貼留言