(C语言)strcpy与strcpy详解,与模拟实现

目录

[1. strcpy](#1. strcpy)

strcpy模拟实现:

实现方法1:

实现方法2:

[2. strcat](#2. strcat)

strcat模拟实现:


1. strcpy

作用:完成字符串的复制。

头文件:<string.h>

destination是字符串要复制到的地点,source是字符串的来源,返回值是destination

演示:

strcpy模拟实现:

实现方法1:

复制代码
#include <assert.h>

char* my_strcpy(char* dest, const char* sour)
{
    assert(*dest != 'NULL');
    assert(*sour != 'NULL');
    char* p = dest;
    while (*sour != '\0')
    {
        *dest = *sour;
        dest++;
        sour++;
    }
    *dest = *sour;
    return p;
}

int main()
{
    char arr1[] = "abedefg";
    char arr2[10] = { 0 };
    char* arr = my_strcpy(arr2, arr1);
    printf("%s\n", arr);
    printf("%s\n", arr2);
    return 0;
}

这种方式是比较麻烦低级的一种写法,下面我们看一个简单的写法。

实现方法2:

复制代码
#include <assert.h>

char* my_strcpy(char* dest, const char* sour)
{
    assert(dest != 'NULL');
    assert(sour != 'NULL');
    char* p = dest;
    while (*dest++ = *sour++)
    {
        ;
    }
    return p;
}

++会在完成解引用并赋值后对dest和sour再进行+1,使指针指向了下一个地址,当sour解引用后是\0时,不仅完成了赋值,并且等式返回的就是sour解引用后的值0,whlie循环结束。

2. strcat

作用:完成字符串的拼接。

头文件<string.h>

参数的内容和strcpy相似。

演示:

strcat模拟实现:

我们可以继续以实现strcpy方法思考,只需要将dest的向后加,使其指向他后面的'\0',让后在将模拟实现strcpy函数的代码拿过来就行了。

复制代码
char* my_strcat(char* dest, const char* sour)
{
	assert(dest && sour != 'NULL');
	char* p = dest;
	while (*dest != '\0')
	{
		dest++;
	}
	while (*dest++ = *sour++)
	{
		;
	}
	return p;
}

这样就完成了我们的模拟实现的功能。

感谢观看,欢迎在评论区讨论。

相关推荐
郝学胜-神的一滴1 小时前
深入理解网络IP协议与TTL机制:从原理到实践
linux·服务器·开发语言·网络·网络协议·tcp/ip·程序人生
程序猿_极客4 小时前
【2025 年最新版】Java JDK 安装与环境配置教程(附图文超详细,Windows+macOS 通用)
java·开发语言·windows·macos·jdk
二哈喇子!7 小时前
BOM模型
开发语言·前端·javascript·bom
C++ 老炮儿的技术栈7 小时前
在C++ 程序中调用被 C编译器编译后的函数,为什么要加 extern “C”声明?
c语言·c++·windows·git·vscode·visual studio
二哈喇子!7 小时前
空指针异常
开发语言
咚为7 小时前
Rust Print 终极指南:从底层原理到全场景实战
开发语言·后端·rust
%xiao Q7 小时前
GESP C++五级-202406
android·开发语言·c++
Psycho_MrZhang7 小时前
Neo4j Python SDK手册
开发语言·python·neo4j
Traced back7 小时前
# C# + SQL Server 实现自动清理功能的完整方案:按数量与按日期双模式
开发语言·c#
sin22017 小时前
MyBatis的执行流程
java·开发语言·mybatis