C语言 strcpy 函数的实现及注意点

本文介绍了C语言中的strcpy函数,包括其原型和如何不使用库函数实现相同功能。同时强调了在使用strcpy函数时应注意的指针修饰、参数有效性检查以及字符串结束标志的重要性,以确保代码的健壮性和安全性。
摘要由CSDN通过智能技术生成
1、 strcpy 函数原型

char * strcpy(char* str1, const char* str2);

2、不使用库函数实现 strcpy 功能
// C语言 版本
#include <stdio.h>

char* MyStrcpy(char* str1, const char* str2)
{
       char* temp = str1;
       if (NULL == str1 || NULL == str2)
       {
              printf("Argument error!");
              return NULL;
       }
       
       while (*str2 != '\0')
       {
              *str1++ = *str2++;
       }
       *str1 = '\0';
       str1 = temp;
       
       return str1;
}

int main()
{
       char str1[20] = { 0 };
       char* str2 = "String!";
       MyStrcpy(str1, str2);
       printf("%s\n", str1);
       
       return 0;
}

运行结果:
在这里插入图片描述

3、注意点
  • 函数参数如果是指针,并且作为输入参数,应该使用 const 修饰,防止指针在函数体内被修改;
  • 注意检查传入参数的有效性,注重代码的健壮性。函数参数检查的几种区别:
    • 使用(!str1 || !str2)或者(str1 && str2),这实际上是类型的隐式转换,将 char* 转换为 bool 类型,这种形式虽然简洁灵活,但是会导致出错概率增大和维护成本升高。
    • 使用(str1 == 0 || str2 == 0),直接使用字面常量(本题中的0),会减少程序的可维护性,0虽然简单,但程序中可能出现很多处对指针的检查,万一出现手误,编译器不能发现,生成的程序内含逻辑错误,很难排除。而使用 NULL 代替0,如果出现拼写错误,编译器就会检查出来。
    • 使用 str == NULL ,如果在写的过程中漏写一个 = ,变成 str = NULL,编译器无法检测出错误,可能导致意想不到的错误。应该采用 NULL == str 这种方式,如果将表达式写成了赋值,编译器会马上报错。
  • 注意保存原始的 str 值;
  • 注意添加字符串结束标志 ‘\0’ 。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值