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

浙公网安备 33010602011771号