C语言--字符串操作函数、内存操作函数介绍及模拟实现


前言

C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在常量字符串中或者字符数组中。
字符串常量 适用于那些对它不做修改的字符串函数。

C语言中常用的字符串函数有:

1、求字符串长度

strlen

2、长度不受限制的字符串函数

strcpy 、strcat 、strcmp

3、长度受限制的字符串函数介绍

strncpy 、strncat 、strncmp

4、字符串查找

strstr 、strtok

5、错误信息报告

strerror

6、字符操作

内存操作函数: memcpy 、memmove 、memset 、memcmp


提示:以下是本篇文章正文内容,下面案例可供参考

一、函数介绍

1.1 strlen

函数原型:

 size_t strlen ( const char * str );

该函数用于计算某字符串的长度,即字符串中字符个数。

  1. 字符串已经 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数(不包含 ‘\0’ )。
  2. 参数指向的字符串必须要以 ‘\0’ 结束,否则会返回随机值。
  3. 注意函数的返回值为size_t,是无符号的( 易错 )。
  4. 注意函数的参数时char*类型,故需传入指针或者地址。

使用示例:

int main()
{
   
    char arr[] = "china";
    char* pa = "people";
    printf("%d\n", strlen(arr));
    printf("%d\n", strlen(pa));

    return 0;
}

在这里插入图片描述
易错示例:

int main()
{
   
    const char* str1 = "abcdef";
    const char* str2 = "bbb";
    if (strlen(str2) - strlen(str1) > 0)
    {
   
        printf("str2>str1\n");
    }
    else
    {
   
        printf("srt1>str2\n");
    }
    return 0;
}

此代码明显是str2<str1,但是使用库函数还是会出现str2>str1,这是因为strlen函数的返回值是无符号型。虽然strlen(str2) - strlen(str1)得到的结果是-3,但其类型还是无符号类型,所以计算机在解读时不会注意到它的符号位,而是把-3解读成一个很大的正数,导致这里出现错误!


1.2 strcpy

函数原型:

char* strcpy(char * destination, const char * source );

该函数用于复制字符串。将source字符串的内容复制到destination中。其返回值是目标空间原本的起始地址。
注意,即使源字符串短于目标字符串,也会直接全覆盖掉目标字符串。

  1. 源字符串必须以 ‘\0’ 结束。
  2. 会将源字符串中的 ‘\0’ 拷贝到目标空间。
  3. 目标空间必须足够大,以确保能存放源字符串。
  4. 目标空间必须可变。

使用示例:

int main()
{
   
    char arr1[20] = " ";
    char* arr2 = "hello";
    strcpy(arr1, arr2);
    printf("%s\n", arr1);
    return 0;
}

1.3 strcat

函数原型:

char * strcat ( char * destination, const char * source );

该函数用以字符串追加。将源字符串的内容追加到目标字符串后面。其返回值是目标空间原本的起始地址。

  1. 源字符串必须以 ‘\0’ 结束。
  2. 目标空间必须有足够的大,能容纳下源字符串的内容。
  3. 目标空间必须可修改。
  4. 字符串自己给自己追加,如何?
    是不可以给自己追加的!因为自己给自己追加时会把结束标志’\0’覆盖掉,找不到结束标志,程序将进入死循环。

使用示例:

int main()
{
   
    char arr1[20] = "hello";
    char* arr2 = " world";
    strcat(arr1, arr2);
    printf("%s\n", arr1);
    return 0;
}

在这里插入图片描述

1.4 strcmp

函数原型:

int strcmp ( const char * str1, const char * str2 );

此函数用于比较两个字符串大小。比较时从第一个字符开始比较,若第一个字符相同则比较第二个字符,依次往后,直到遇见不相等的字符。如果最后一个字符即两个字符串的结束标志’\0’比完还相等,就说两个字符串相等。

  1. 第一个字符串大于第二个字符串,则返回大于0的数字
  2. 第一个字符串等于第二个字符串,则返回0
  3. 第一个字符串小于第二个字符串,则返回小于0的数字
  4. 那么如何判断两个字符串?

使用示例:

int main()
{
   
    char ch1[] = "abcdef";
    char* ch2 = "abcdff";
    if (strcmp(ch1, ch2) > 0)
    {
   
        printf("ch1 > ch2\n");
    }
    else printf("ch1 <= ch2\n");
}

在这里插入图片描述

1.5 长度受限制的字符串函数strncpy、strncat、strncmp

前面提到的几个strcpy、strcat、strcmp函数使用时无需考虑字符串长度。那么如果我们需要指定复制、追加、比较时字符串的某几位该如何呢?strn系列字符串函数应运而生。下面介绍这三个字符串函数的使用:

1.5.1 strncpy

函数原型:

char * strncpy ( char * destination, const char * source, size_t num );

该函数用以拷贝num个字符从源字符串到目标空间。

如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加\0,直到num个。

使用举例:

int main()
{
   
    char des[] = "abcdef";
    char*</
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值