(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;
}

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

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

相关推荐
邹诗钰-电子信息工程38 分钟前
嵌入式自学第二十一天(5.14)
java·开发语言·算法
恋猫de小郭1 小时前
如何查看项目是否支持最新 Android 16K Page Size 一文汇总
android·开发语言·javascript·kotlin
小_楠_天_问1 小时前
第二课:ESP32 使用 PWM 渐变控制——实现模拟呼吸灯或音调变化
c语言·嵌入式硬件·mcu·esp32·arduino·pwm·esp32-s3
秋山落叶万岭花开ღ2 小时前
C语言顺序表应用详解:从理论到实践
c语言
于壮士hoho2 小时前
Python | Dashboard制作
开发语言·python
2301_803554522 小时前
c++和c的不同
java·c语言·c++
小狗祈祷诗2 小时前
day20-线性表(链表II)
c语言·数据结构·链表
Asus.Blogs3 小时前
为什么go语言中返回的指针类型,不需要用*取值(解引用),就可以直接赋值呢?
开发语言·后端·golang
青瓦梦滋3 小时前
【语法】C++的多态
开发语言·c++
白露秋483 小时前
C——五子棋小游戏
c语言·游戏