c string 常用函式
1:void *memchr(const void *str, int c, size_t n)在str的前n個位元組中搜索第一次出現字元 c的位置。返回字元位置的指標
char *str = "hello low"; char ch = 'l'; char * ret =(char *)memchr(str, ch, 7); //llo low
ptrdiff_t num = ret - str; //2
2:int memcmp(const void *str1, const void *str2, size_t n),比較倆個字串的前幾個位置,相同返回0;返回值 < 0,則表示 str1 小於 str2,返回值 > 0,則表示 str2 小於 str1
int ret_value = memcmp("asd01", "asd0www", 4); //ret_value=0
3:void* memcpy(void* Dst,void const* Src, size_t Size); 從儲存區將Src中的Size個位元組拷貝到Dst。
errno_t memcpy_s(void * restrict dest,rsize_t destsz,const void * restrict src,rsize_t count);destsz 目標的大小
char Dst[10] = "qweshh"; char* Src = "sss";char * ret_cpy= memcpy(Dst, Src, 2); //sse char * ret_cpy = memcpy(Dst+5, Dst+2, 2);
4:void * memmove(void * dest,const void * src,size_t count)是在重疊記憶體塊這方面,memmove() 是比 memcpy() 更安全的方法。如果目標區域和源區域有重疊的話,memmove() 能夠保證源串在被覆蓋之前將重疊區域的位元組拷貝到目標區域中,複製後源區域的內容會被更改。如果目標區域與源區域沒有重疊,則和 memcpy() 函式功能相同。
errno_t memmove_s(void * dest,rsize_t destsz,const void * src,rsize_t count);
char * ret_cpy=memmove(Dst, Src, 1); char* des = (char*)malloc(4 * sizeof(char)); char * ret_cpy = strcpy(des, Src); char str[] = "1234567890"; memmove(str + 4, str + 3, 3);
5:void * memset(void * dest,int ch,size_t count //複製字元ch到dest前 count個字元,用在對定義的字串進行初始化,對結構體或陣列清零初始化等
errno_t memset_s(void * dest,rsize_t destsz,int ch,rsize_t count),
memset對非字元型陣列賦初值是不可取的!
例:
int mem[10];
memset(mem, 2, sizeof(mem));//錯誤並不鞥賦值
char memset_str[] = "qwerzxc"; memset(memset_str, 'u', 3);
6:
char *strcat(char *dest, const char *src) 合併字串dest+ src;
char *strncat(char *dest, const char *src, size_t n) 合併字串可以指定長度,
7:
char *strchr(const char *str, int c),在str的中搜索第一次出現字元 c的位置。返回字元位置的指標
char *strrchr(const char *str, int c)在str的中搜索最後次出現字元 c的位置。返回字元位置的指標
8:
int strcmp(const char *str1, const char *str2),比較倆個字串,如果返回值小於 0,則表示 str1 小於 str2。如果返回值大於 0,則表示 str1 大於 str2。如果返回值等於 0,則表示 str1 等於 str2。
int strncmp(const char *str1, const char *str2, size_t n),比較倆個字串的前n 個字元
int strcoll(const char *str1, const char *str2),比較倆個字串,受本地化LC_COLLATE影響
9:
char *strcpy(char *dest, const char *src) 將Src中的Size個位元組拷貝到dest
char *strncpy(char *dest, const char *src, size_t n)將Src中的Size個位元組拷貝到dest
10:
size_t strcspn(const char *str1, const char *str2)在str1中第一次出現str2中字元的位置
size_t strspn(const char *str1, const char *str2) 在str1 中第一個不在字串 str2 中出現的字元的位置
const char str1[] = "A7345F4910";
const char str2[] = "53";
const char str3[] = "A73cc910";
int pos =strcspn(str1,str2);//2(A7)
int pos1 =strspn(str1, str3);//3(A73)
11:size_t strlen(const char *str)計算字串 str 的長度,直到空結束字元,但不包括空結束字元。對比sizeof();
const char str2[] = "853"; int len = strlen(str2); //3 int sizeoflen= sizeof(str2); //4 char *str = "853"; sizeoflen = sizeof(str); //4,指標的長度
12:char *strpbrk(const char *str1, const char *str2),在str1中查詢第一個與str2中匹配的字元,返回該字元位置。
const char str1[] = "abcde1122334455"; const char str2[] = "33"; char * ret = strpbrk(str1,str2); printf("%s\n", ret);//334455
13:char *strtok(char *str, const char *delim) ,把字串 str 按delim分隔;返回分割後的子字串,不匹配返回null;
const char str[] = "yy-mm-dd"; char *delim_str = strtok(str,"-"); while (delim_str) { printf("%s\n", delim_str); delim_str=strtok(NULL, "-");// 繼續分割 }
14:char *strstr(const char *str1, const char *str2) 在 str1中查詢第一次出現字串 str2的位置,不包含終止符
const char str1[] = "abcde1122334455"; const char str2[] = "33"; const char str3[] = "3355"; char * ret=strstr(str1,str2);//334455 char * ret1 = strstr(str1, str3);//null