查看原文
其他

C标准库string.h中几个常用函数的使用详解

wcc149 电子电路开发学习 2021-01-31

strlen

计算字符串长度

  1. size_t strlen(const char *str)

计算字符串 str 的长度,直到空结束字符,但不包括空结束字符。

函数实现:

  1. int Strlen(const char *str)

  2. {

  3.    assert(str);

  4.    int len = 0;

  5.    while ((*str++) != '\0')len++;

  6.    return len;

  7. }

strcpy

字符串复制

  1. char *strcpy(char *dest, const char *src)

把 src 所指向的字符串复制到 dest。

函数实现:

  1. char *Strcpy(char *dst, const char *src)

  2. {

  3.    assert(dst && src);

  4.    char *tmp = dst;

  5.    while ((*dst++ = *src++) != '\0');

  6.    return tmp;

  7. }

strncpy

复制连续的n个字符

  1. char *strncpy(char *dest, const char *src, size_t n)

把 src 所指向的字符串复制到 dest,最多复制 n 个字符。

函数实现:

  1. char *Strncpy(char *dst, const char *src, int len)

  2. {

  3.    assert(dst&&src);

  4.    char *tmp = dst;

  5.    int offset = 0;

  6.    if (len > strlen(src))

  7.    {

  8.        offset = len - strlen(src);

  9.        len = strlen(src);

  10.    }

  11.    while (len--)

  12.    {

  13.        *dst++ = *src++;

  14.    }

  15.    while (offset--)

  16.    {

  17.        *dst++ = '\0';

  18.    }

  19.    return tmp;

  20. }

strcat

把一个字符串连接到另一个字符串后面

  1. char *strcat(char *dest, const char *src)

把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。

函数实现:

  1. char *Strcat(char *dst, const char* src)

  2. {

  3.    assert(dst && src);

  4.    char *tmp = dst;

  5.    while (*dst++);

  6.    dst--;

  7.    while (*dst++ = *src++);

  8.    return tmp;

  9. }

strncat

把连续的n个字符连接到另一个字符串后面

  1. char *strncat(char *dest, const char *src, size_t n)

把 src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 n 字符长度为止。

函数实现:

  1. char *Strncat(char *dst, const char* src, int len)

  2. {

  3.    assert(dst && src);

  4.    char *tmp = dst;

  5.    while (*dst++);

  6.    dst--;

  7.    while (len--)

  8.    {

  9.        *dst++ = *src++;

  10.    }

  11.    *dst = '\0';

  12.    return tmp;

  13. }

示例:

  1. #include <stdio.h>

  2. #include <string.h>


  3. int main(void)

  4. {

  5.    char str0[20] = "Test:";

  6.    char str1[20] = "Welcome9999";

  7.    char str2[20] = " To ";

  8.    char str3[20] = "0123Beijing55";

  9.    char tmp[100];


  10.    strcpy(tmp, str0);

  11.    puts(tmp);      //Test:


  12.    strncpy(tmp, str1, 7);  //取st1前7个字符

  13.    puts(tmp);      //Welcome


  14.    strcat(tmp, str2);      //连接str2

  15.    puts(tmp);


  16.    strncat(tmp, str3 + 4, 7);  //取str3+4之后的7个字符

  17.    puts(tmp);


  18.    return 0;

  19. }

输出结果:

strchr

查找某字符在字符串中首次出现的位置指针,如果不存在则返回NULL

  1. char *strchr(const char *str, int c)

在参数 str 所指向的字符串中搜索第一次出现字符 c(一个无符号字符)的位置。

函数实现:

  1. char* My_strchr(char *s, char c)

  2. {

  3.    while(*s != '\0' && *s != c)

  4.    {

  5.        ++s;

  6.    }

  7.    return *s==c ? s : NULL;

  8. }

示例:

  1. #include <string.h>

  2. #include <stdio.h>

  3. int main(void)

  4. {

  5.    char string[20] = "This is a string";

  6.    char *ptr1, *ptr2;

  7.    char c1 = 'r', c2 = 'b';


  8.    ptr1 = strchr(string, c1);

  9.    ptr2 = strchr(string, c2);


  10.    if(ptr1)

  11.        printf("字符1:%c 的位置是: %s \n",c1,ptr1);

  12.    else

  13.        printf("字符1:%c 未找到 \n", c1);


  14.    if(ptr2)

  15.        printf("字符2:%c 的位置是: %s \n",c2,ptr2);

  16.    else

  17.        printf("字符2:%c 未找到 \n", c2);


  18.    return 0;

  19. }

输出结果:

strcmp

字符串比较

  1. int strcmp(const char *str1, const char *str2)

把 str1 所指向的字符串和 str2 所指向的字符串进行比较。

设这两个字符串为str1,str2, 若str1=str2,则返回零; 若str1str2,则返回正数。,则返回负数;>

函数实现:

  1. int Strcmp(char const *s1, char const *s2)

  2. {

  3.    assert(s1&&s2);

  4.    while (*s1 == *s2 && *s1 != '\0' && *s2 != '\0')

  5.    {

  6.        s1++;

  7.        s2++;

  8.    }

  9.    if (*s1 == *s2)

  10.    {

  11.        return 0;

  12.    }

  13.    else if (*s1 > *s2)

  14.    {

  15.        return 1;

  16.    }

  17.    return -1;

  18. }

示例:

  1. #include <string.h>

  2. #include <stdio.h>

  3. int main(void)

  4. {

  5.    char str1[20] = "abc";

  6.    char str2[20] = "abc";

  7.    char str3[20] = "bbc";


  8.    int r1, r2, r3;


  9.    r1 = strcmp(str1, str2);

  10.    r2 = strcmp(str1, str3);

  11.    r3 = strcmp(str3, str1);


  12.    printf("r1 = %d, r2 = %d, r3 = %d \n", r1, r2, r3);


  13.    return 0;

  14. }

输出结果:

strstr

字符串查找

  1. char *strstr(const char *haystack, const char *needle)

在字符串 haystack 中查找第一次出现字符串 needle(不包含空结束字符)的位置。

函数实现:

  1. char *Strstr(char const *s1, char const *s2)

  2. {

  3.    assert(s1&&s2);

  4.    const char *ps1, *ps2;

  5.    ps1 = s1;

  6.    ps2 = s2;

  7.    while (*ps1)

  8.    {

  9.        const char *tmp = ps1;

  10.        while (*tmp++ == *ps2++);

  11.        if (*ps2 == '\0')

  12.        {

  13.            return (char*)ps1;

  14.        }

  15.        ps2 = s2;

  16.        ps1++;

  17.    }

  18.    return NULL;

  19. }

strncmp

  1. int strncmp(const char *str1, const char *str2, size_t n)

把 str1 和 str2 进行比较,最多比较前 n 个字节。

函数实现:

  1. int Strncmp(char const *s1, char const *s2, int len)

  2. {

  3.    assert(s1&&s2);

  4.    while (len-- && *s1 == *s2 && *s1 != '\0' && *s2 != '\0')

  5.    {

  6.        s1++;

  7.        s2++;

  8.    }

  9.    return *s1 - *s2;

  10. }

memcpy

内存复制

  1. void *memcpy(void *dest, const void *src, size_t n)

从 src 复制 n 个字符到 dest。

函数实现

  1. void *Memcpy(char *dst, char const *src, int len)

  2. {

  3.    assert(dst && src);

  4.    char *tmp = dst;

  5.    const char *s = src;

  6.    while (len--)

  7.    {

  8.        *dst++ = *src;

  9.    }

  10.    return tmp;

  11. }


Jlink使用技巧系列文章:


欢迎大家关注我的个人博客

http://www.wangchaochao.top

或微信扫码关注我的公众号


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存