C++ 中strcpy标准写法实例详解

发布时间 - 2026-01-11 01:49:05    点击率:

strcpy标准写法

实例代码:

// CppReference.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
using namespace std;

/*
 * 说明:字符串拷贝版本1
 * 参数:dest目标地址,src源地址
 * 返回:返回拷贝好的地址;如果出错或者有重叠,无定义
 * 异常:可能出现字符串溢出,及dest所占空间不如src所占空间大。
 */
char *strcpy_v1(char *dest , const char *src)
{
  //调试时,使用断言,入口检测
  assert( (dest!=NULL) && (src!=NULL) );
  
  //注意这里的内存指向参数dest所在的内存,不是栈内存,因而可以在函数中返回
  char *to = dest;
  
  //主要操作在while条件中完成
  while( (*dest++ = *src++)!='\0')
  {
    NULL;  
  }
  
  //返回拷贝字符串首地址,方便连缀,比如strlen(strcpy(dest,"hello"))
  return to;
}

/*
 * 说明:字符串拷贝版本2
 * 参数:dest目标地址,src源地址
 * 返回:返回拷贝好的地址;如果出错,无定义
 * 异常:可能出现字符串溢出,及dest所占空间不如src所占空间大。
 */
char *strcpy_v2(char *dest , const char *src)
{
  char *d = dest;
  char c;
  
  while((c=*src++) != '\0')
  {
    *(dest++)=c;
  }
  
  *dest='\0';
  
  return d;
}

/*
 * 说明:字符串拷贝版本2(你能找出错误的原因吗)
 * 参数:dest目标地址,src源地址
 * 返回:返回拷贝好的地址;如果出错,无定义
 * 异常:可能出现字符串溢出,及dest所占空间不如src所占空间大。
 */
char *strcpy_v2_error(char *dest , const char *src)
{
  char *d = dest;
  char c;
  
  while((c=*src++) != '\0')
  {
    *(d++)=c;
  }
  
  *d='\0';
  
  return d;
}


/*
 * 说明:字符串拷贝版本3
 * 参数:dest目标地址,src源地址
 * 返回:返回拷贝好的地址;如果出错,无定义
 * 异常:可能出现字符串溢出,及dest所占空间不如src所占空间大。
 */
char *strcpy_v3(char *dest , const char *src)
{
  char *d = dest;
  char c;
  
  while(*src)
    *dest++ = *src++;
    
  *dest='\0';
  
  return d;
}

/*
 * 说明:字符串拷贝版本4
 * 参数:dest目标地址,src源地址
 * 返回:返回拷贝好的地址;如果出错,无定义
 * 异常:可能出现字符串溢出,及dest所占空间不如src所占空间大。
 */
char *strcpy_v4(char *dest , const char *src)
{
  char *d = dest;
  char c;
  
  while( (*dest = *src)!='\0')
  {
    src++;
    dest++; 
  }
    
  *dest='\0';
  
  return d;
}

/*
 * 说明:字符串拷贝版本5
 * 参数:dest目标地址,src源地址
 * 返回:返回拷贝好的地址;如果出错,无定义
 * 异常:可能出现字符串溢出,及dest所占空间不如src所占空间大。restrict关键字限定字符串不能重叠。
 */
char *strcpy_v5(char* _restrict dest , const char* _restrict src)
{
  char *d = dest;
  char c;
  
  while( (*dest = *src)!='\0')
  {
    src++;
    dest++; 
  }
    
  *dest='\0';
  
  return d;
}

/*
 * 说明:字符串拷贝版本6
 * 参数:dest目标地址,src源地址
 * 返回:返回拷贝好的地址;如果出错,无定义
 * 异常:可能出现字符串溢出,及dest所占空间不如src所占空间大。restrict关键字限定字符串不能重叠。
 */
char *strcpy_v6(char* _restrict dest , const char* _restrict src)
{
  char *d = dest;
  char c;
  
  while(*dest++=*src++); 
  return d;
}



int _tmain(int argc, _TCHAR* argv[])
{
  char buf[512];
  
  char *buf2 = (char *)calloc(50,sizeof(char));
  
  char *buf3 = (char *)malloc(50*sizeof(char));
  
  char *buf5 = (char *)malloc(50*sizeof(char));
  
  char *buf6 = (char *)malloc(50*sizeof(char));
  
  printf("using strcpy_v1,the string 'Hello,World'\'s length is : %d\n",strlen(strcpy_v1(buf,"Hello,World")));
  
  printf("using strcpy_v2,the string 'This is the best age'\'s length is : %d\n",strlen(strcpy_v2(buf2,"This is the best age")));
  
  printf("using strcpy_v2,the string 'This is the best age'\'s length is : %d\n",strlen(strcpy_v2_error(buf2,"This is the best age")));
  
  printf("using strcpy_v3,the string 'This is the best age'\'s length is : %d\n",strlen(strcpy_v3(buf3,"This is the best age")));
  
  printf("using strcpy_v5,the string 'This is the best age'\'s length is : %d\n",strlen(strcpy_v5(buf5,"This is the best age")));
  
  printf("using strcpy_v6,the string 'This is the best age'\'s length is : %d\n",strlen(strcpy_v6(buf6,"This is the best age")));
 
  system("pause");
  
  return 0;
}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# C++  # 中strcpy标准写法  # C/C++  # strcpy标准写法  # 浅析C++中memset  # memcpy  # strcpy的区别  # C++实现strcpy函数实例  # 关于C++中strcpy函数例题讲解  # C++中strcpy函数的实现  # C++ std::copy与memcpy区别小结  # C++中memcpy函数的使用以及模拟实现  # C/C++中memset  # memcpy的使用及fill对数组的操作  # C++中strcpy和memcpy的区别小结  # 所占  # 可能出现  # 源地址  # 你能  # 希望能  # 谢谢大家  # 应用程序  # const  # NULL  # char  # strlen  # return  # assert  # strcpy_v2_error  # amp  # class  # brush  # cpp  # strong  # strcpy 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法  昵图网官方站入口 昵图网素材图库官网入口  javascript事件捕获机制【深入分析IE和DOM中的事件模型】  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析  简历在线制作网站免费版,如何创建个人简历?  制作电商网页,电商供应链怎么做?  Laravel Docker环境搭建教程_Laravel Sail使用指南  Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】  Laravel如何实现用户密码重置功能?(完整流程代码)  电商网站制作价格怎么算,网上拍卖流程以及规则?  清除minerd进程的简单方法  Python企业级消息系统教程_KafkaRabbitMQ高并发应用  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转  JavaScript实现Fly Bird小游戏  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  SQL查询语句优化的实用方法总结  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  Windows Hello人脸识别突然无法使用  制作公司内部网站有哪些,内网如何建网站?  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】  历史网站制作软件,华为如何找回被删除的网站?  英语简历制作免费网站推荐,如何将简历翻译成英文?  如何为不同团队 ID 动态生成多个独立按钮  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】  Laravel如何使用Collections进行数据处理?(实用方法示例)  无锡营销型网站制作公司,无锡网选车牌流程?  网站制作价目表怎么做,珍爱网婚介费用多少?  什么是javascript作用域_全局和局部作用域有什么区别?  深入理解Android中的xmlns:tools属性  Android自定义控件实现温度旋转按钮效果  Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道  如何在IIS管理器中快速创建并配置网站?  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  C语言设计一个闪闪的圣诞树  中国移动官方网站首页入口 中国移动官网网页登录  laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法  百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭  Laravel如何使用Telescope进行调试?(安装和使用教程)  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  如何在橙子建站中快速调整背景颜色?  EditPlus中的正则表达式实战(5)  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  Laravel storage目录权限问题_Laravel文件写入权限设置  微信小程序 HTTPS报错整理常见问题及解决方案  如何构建满足综合性能需求的优质建站方案?