C语言---字符串 + 内存函数详解整理

本文详细介绍了C语言中常用的字符串处理函数,如strlen、strcpy、strcat等,以及它们的特性、用法和可能遇到的问题。同时,还提供了这些库函数的模拟实现代码,帮助理解其实现原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一.函数介绍

求字符串长度

strlen

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

1. strcpy 

2. strcat 

3. strcmp

长度受限制的字符串函数

1. strncpy

2. strncat

3.strncmp

字符串查找

1. strstr

2. strtok 

错误信息报告

 strerror

 字符分类和转换函数

  ​编辑内存操作函数

1. memcpy

2. memmove

3. memset

4. memcmp

二. 上述常用库函数的模拟实现

1.模拟实现strlen

2. 模拟实现strcpy

 3. 模拟实现strcat

 4. 模拟实现strstr

5. 模拟实现strcmp

6. 模拟实现memcpy

7. 模拟实现memmove

 


一.函数介绍

求字符串长度

strlen

  size_t strlen ( const char * str );

  字符串以 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数(不包含 '\0' )。

  参数指向的字符串必须要以 '\0' 结束。

  注意函数的返回值为size_t,是无符号的( 易错 ),如下示例:

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

1. strcpy 

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

  拷贝字符串

  将指向的 C 字符串拷贝到目标指向的数组中,包括终止字符 '\0'(并在该点停止),是一种覆盖。

  源字符串必须以 '\0' 结束,且目标空间必须可修改。
  为避免溢出destination 指向的数组的大小应足够长,以包含与 source 相同的 C 字符串(包括终止字符 '\0' )。

   返回指向目标数组的起始地址,即destination,如下示例:

2. strcat 

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

  连接字符串

  字符串的拷贝追加到目标字符串。destination 中的终止字符 '\0' 被 source 的第一个字符覆盖,并且在 destination 中由两者串联形成的新字符串的末尾包含一个结束字符 '\0'。

  源字符串必须以 '\0' 结束。

  目标空间必须有足够的大,能容纳下源字符串的内容。

  目标空间必须可修改。 

   返回destination,如下示例:

  注意:目的地destination来源source不得重叠,否则会发生错误,如下示例:

  由于目的地和源串是同一块空间,那么目的地的终止字符'\0'被覆盖的同时,源串的终止字符也被修改了,导致了死循环,进而引发了数组的越界访问操作。

3. strcmp

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

  比较两个字符串

  将 C 字符串 str1 与 C 字符串 str2 进行比较。

  此函数从每个字符串的第一个字符开始比较,如果它们彼此相等,则继续以下对,直到字符不同或达到终止字符 '\0'。

  标准规定:

        第一个字符串 > 第二个字符串,则返回大于0的数字

        第一个字符串 == 第二个字符串,则返回0

        第一个字符串 < 第二个字符串,则返回小于0的数字

  如下示例:

长度受限制的字符串函数

1. strncpy

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一般清意味……

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值