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

 

posted @ 2020-10-22 18:11  Monday1024  阅读(390)  评论(0)    收藏  举报