【C语言】模拟实现字符串函数——strcat

简介: 【C语言】模拟实现字符串函数——strcat

一、strcat函数的应用

strcat()函数,string catenate 的缩写,即字符串追加(连接)库函数,我们不理解strcat函数的使用规则,依旧可以在www.cplusplus.com进行查询,点击链接跳转。

image.png

调用strcat的函数格式与strcpy类似,红框线的部分即为strcat的基本规则:将source字符串内容追加到destination字符串内容中去。 需要引用头文件<string.h>.废话不多说,我们直接上代码:

#include<stdio.h>
#include<string.h>
int main()
{
  char arr1[20] = "hello ";
  char arr2[] = "world";
  strcat(arr1, arr2);
  printf("%s", arr1); //hello world
}

将代码打印,我们发现arr2的内容成功追加到arr1当中去。当然前提和strcpy函数一样,目标空间必须足够大,以确保能够存放源字符串。

image.png

那么在追加源字符串的时候需不需要把'\0'也拷贝过去呢?下面我们把数组arr1的字符串内容修改一下,以更方便地测试程序的流程。

#include<stdio.h>
#include<string.h>
int main()
{
  char arr1[20] = "hello \0########";
  char arr2[] = "world";
  strcat(arr1, arr2);
  printf("%s", arr1 );
}

1.1代码调试 (查找函数工作原理)

通过代码调试,我们发现,源字符串的'w'覆盖掉了目标字符串的'\0',源字符串的'\0'也被传递了过去。

6.1.png6.2.png

二、模拟实现strcat函数

知道了库函数strcat的工作原理,实现前将函数规则整理如下:

  1. 源字符串必须以 '\0' 结束。
  2. 目标空间必须有足够的大,能容纳下源字符串的内容。
  3. 目标空间必须可修改

下面,我们就开始学习如何模拟实现strcat函数?

#include<stdio.h>
#include<string.h>
#include<assert.h>
char* my_strcat(char* dest,const char* src)
{
  assert(dest && src);
  char* begin = dest;
  //第一步、寻找目标字符串中的\0
  while (*dest)
  {
    dest++;
  }
  //第二步、追加源字符串并包含\0
  while (*dest++ = *src++)
  {
    ;
  }
  return begin;
}
int main()
{
  char arr1[20] = "hello ";
  char arr2[] = "world";
  printf("%s", my_strcat(arr1, arr2));
}

 分析:第一步,我们需要找到目标字符串的'\0',这和模拟实现strlen函数有些许类似,我们用while循环遍历,直接让dest指针找到'\0'。


第二步,我们将源字符串拷贝过去,并覆盖目标字符串中的'\0',这一步,有点类似于我们上一期学的strcpy函数的模拟实现。


当src指向'w'时,*src解引用,将'w'赋值给*dest,覆盖了目标字符串的'\0',整体表达式结果为真,继续执行自增操作……直到将'd'赋值给dest后,此时再自增,此时src指向了'\0',将'\0'赋值给了dest,同时整体表达式结果为假('\0'ASCII码值为0),循环终止。


我们会发现这样的代码既完成了拷贝过程,也完美地终止了拷贝操作。


image.png

image.png

同时我们发现库函数strcat在cplusplus官网里的规则也是具有返回值的,返回类型为char*,返回的是目标空间的起始地址,所以我们在最开始,将dest的起始地址传递到begin指针变量当中去,后面直接返回begin指针变量。最后,我们在打印时,直接打印my_strcat的返回值,也是可以的(%s通过字符串的首地址打印出字符串)。


image.png

image.png

目录
相关文章
|
1月前
|
C语言 C++
【C语言】解决不同场景字符串问题:巧妙运用字符串函数
【C语言】解决不同场景字符串问题:巧妙运用字符串函数
|
27天前
|
存储 C语言
【c语言】字符串函数和内存函数
本文介绍了C语言中常用的字符串函数和内存函数,包括`strlen`、`strcpy`、`strcat`、`strcmp`、`strstr`、`strncpy`、`strncat`、`strncmp`、`strtok`、`memcpy`、`memmove`和`memset`等函数的使用方法及模拟实现。文章详细讲解了每个函数的功能、参数、返回值,并提供了具体的代码示例,帮助读者更好地理解和掌握这些函数的应用。
23 0
|
1月前
|
存储 安全 编译器
深入C语言库:字符与字符串函数模拟实现
深入C语言库:字符与字符串函数模拟实现
|
1月前
|
C语言
C语言常见字符函数和字符串函数精讲
C语言常见字符函数和字符串函数精讲
|
1月前
|
C语言
【C语言】模拟实现深入了解:字符串函数
【C语言】模拟实现深入了解:字符串函数
|
3月前
|
安全 程序员 C语言
【C语言】字符串函数及其模拟实现
【C语言】字符串函数及其模拟实现
|
3月前
|
C语言
【C语言篇】字符和字符串以及内存函数详细介绍与模拟实现(下篇)
perror函数打印完参数部分的字符串后,再打印⼀个冒号和⼀个空格,再打印错误信息。
63 0
|
3月前
|
存储 安全 编译器
【C语言篇】字符和字符串以及内存函数的详细介绍与模拟实现(上篇)
当然可以用scanf和printf输入输出,这里在之前【C语言篇】scanf和printf万字超详细介绍(基本加拓展用法)已经讲过了,这里就不再赘述,主要介绍只针对字符的函数.
55 0
|
4月前
|
存储 缓存 C语言
【C语言】字符函数,字符串函数,内存函数
C语言中的字符串函数和内存函数
57 0
【C语言】字符函数,字符串函数,内存函数
|
5月前
|
C语言
【c语言】字符串函数的模拟实现(二)
【c语言】字符串函数的模拟实现(二)
26 1