模拟实现strcpy(字符串拷贝)(C语言)

C 库函数 - strcpy()

描述

c 复制代码
char *strcpy(char *dest, const char *src) 

把 src 所指向的字符串复制到 dest。

需要注意的是如果目标数组 dest 不够大,而源字符串的长度又太长,可能会造成缓冲溢出的情况。

声明

下面是 strcpy() 函数的声明:

c 复制代码
char *strcpy(char *dest, const char *src)

参数

dest -- 指向用于存储复制内容的目标数组。

src -- 要复制的字符串。

返回值

该函数返回一个指向最终的目标字符串 dest 的指针。

模拟实现

1.0

c 复制代码
void my_strcpy(char* dest, char* src)//版本一
{
	while (*src != '\0')
	{
		*dest = *src;
		src++;
		dest++;
	}
	*dest = *src;
}

2.0

c 复制代码
// 满足递进关系与后置++,简化代码
//(缺点,指针解引用前无保护)
void my_strcpy(char* dest, char* src)
{
	while (*dest++ = *src++)  //'\0' 为假,控制循环
		;
}

3.0

c 复制代码
//优化三:在解引用指针前,判断指针的有效性(必须)
//(虽防止出现野指针,但没提示出哪里出错)
void my_strcpy(char* dest, char* src)
{
	if (src != NULL&&dest != NULL)
	{
		while (*dest++ = *src++)
			;
	}
}

4.0

c 复制代码
//编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设,可以将断言看作是异常处理的一种高级形式。
#include<assert.h>
void my_strcpy(char* dest, char* src)//法四:断言法(在保护的基础上,告诉错误在哪)
{
	assert(dest != NULL);           //fail(失败,不成功)
	assert(src != NULL);
	if (src != NULL){
		while (*dest++ = *src++);
	}
}

5.0

c 复制代码
#include <assert.h>
#include <stddef.h> // 引入 NULL 定义

char* my_strcpy(char* dest, const char* src) 
{
    // 1. 断言:只在 Debug 下检查,暴露写代码的人的 Bug
    assert(dest != NULL);
    assert(src != NULL);

    // 2. 标准库行为:如果传入 NULL,未定义行为,我们让它在 Release 下直接崩溃(而非静默)
    // 实际上 assert 在 Release 下被剥离,所以如果有风险,可在 Release 下加条件判断主动崩溃
    if (dest == NULL || src == NULL) {
        return NULL; // 或者 abort(); 但绝不能静默复制!
    }

    char* ret = dest;

    // 3. 复制(内存重叠不考虑,那是 memmove 的事)
    while (*dest++ = *src++) 
        ;

    return ret;
}
相关推荐
java资料站1 小时前
十一、评估测试
开发语言·人工智能·python
左手の明天2 小时前
SLIP 协议封装与解析详解:原理、C 代码与实战案例
linux·c语言·开发语言·c++
shuoshuohaohao2 小时前
MyBatis 小知识点
java·spring·mybatis
海上小飞龙2 小时前
【KMP算法-下篇】同一道题:Java 库函数 2600 微秒,手写 KMP 16 微秒
java·开发语言·算法
青少儿编程课堂2 小时前
后缀自动机解析:本质不同子串与最长重复片段统计
c++·python·算法·bfs·信息学竞赛
朝朝辞暮i2 小时前
C++ 第 12 课:局部变量、作用域、变量生命周期
开发语言·c++·算法
狗凯之家源码网2 小时前
淘客口令落地页生成器 PHP 版深度评测
开发语言·php
画绛集美术2 小时前
本地化部署LLM用于美术史问答:一间美术教室的实践记录
开发语言·php
谢亮_vipxieliang3 小时前
泛型擦除、通配符与 PECS 一次讲透
java·面试
八解毒剂3 小时前
【计组】中央处理器CPU
java·开发语言·计算机组成原理