当前位置: 首页 > java >正文

C56-亲自实现字符串拷贝函数

一 strcpy简介

功能:将源字符串(包括 \0)复制到目标地址。

原型

char *strcpy(char *dest, const char *src);
  • 参数:
    • dest:目标地址(需足够大)。
    • src:源字符串(以 \0 结尾)。
  • 返回值:返回 dest 的指针。

示例

char src[] = "ABC";
char dest[10];
strcpy(dest, src); // dest 变为 "ABC"

风险:不检查 dest 空间,可能溢出(如 srcdest 长)

一句话总结:快速复制字符串,但需确保目标空间足够,否则用安全替代函数。

二 封装自己的strcpy函数

  • 代码示例:
#include <stdio.h>
#include <string.h>//依据"strcpy"函数原型封装一个函数用于实现其功能
char *MyStrcpy(char *dest,char *string)
{   //正式操作前进行安全性检查if(dest==NULL||string==NULL){return NULL;}//函数的主体char *back=dest;    //对目标指针进行保存while(*string!='\0'){*dest=*string;dest++;string++;}*dest='\0';return back;
}int main()
{char str[128]={'\0'};char *p="Hello Word!";MyStrcpy(str,p);printf("%s",str);return 0;
}
  • 成果展示:

image-20250531184324253

三 strncpy简介

功能:安全复制字符串,限制长度防溢出

用法

char *strncpy(char *dest, const char *src, size_t n);
  • 参数:

    • dest:目标缓冲区(存储复制结果)。
    • src:源字符串(以 \0 结尾)。
    • n:最多复制的字符数(包括 \0)。
  • 返回值:返回 dest 的指针。

  • 最多复制 n 个字符到 dest

  • src 较短,剩余空间补 \0

  • src 较长,不会自动加 \0

注意

  1. 需确保 dest 足够大

  2. 建议手动补\0

    dest[n-1] = '\0';
    

示例

char dest[5];
strncpy(dest, "hello", 5);
dest[4] = '\0';  // 安全终止

特点

  • strcpy 安全
  • 需自行处理字符串终止

四 封装自己的strncpy函数

  • 代码示例:
#include <stdio.h>
#include <string.h>//依据"strncpy"函数原型封装一个函数用于实现其功能
char *MyStrncpy(char *dest,char *string,int count)
{   //正式操作前进行安全性检查if(dest==NULL||string==NULL){return NULL;}//函数的主体char *back=dest;    //对目标指针进行保存while(*string!='\0'&&count>0){*dest=*string;dest++;string++;count--;}if(count>0){while(count>0){count--;*dest++='\0';}return dest;}*dest='\0';return back;
}int main()
{char str[128]={'\0'};char *p="Hello Word!";MyStrncpy(str,p,6);printf("%s",str);return 0;
}
  • 成果展示:

image-20250531191052594

http://www.xdnf.cn/news/10305.html

相关文章:

  • python连接邮箱,下载附件,并且定时更新的方案
  • SSM框架前后端网站显示不出来图片
  • stm32——SPI协议
  • 随机响应噪声-极大似然估计
  • 飞腾D2000与FPGA结合的主板
  • C语言基础(08)【循环结构】
  • 吴恩达MCP课程(2):research_server
  • 深入剖析Java类加载机制:双亲委派模型的突破与实战应用
  • 头歌java课程实验(Java面向对象 - 包装类)
  • C++语法系列之右值
  • vedio.ontimeupdate()和video.onloadeddata()
  • C++二叉树常见OJ题分析
  • 2025-05-31 Python深度学习10——模型训练流程
  • 一些常用的命令
  • 1.JS逆向简介
  • JSR 303(即 Bean Validation)是一个通过​​注解在 Java Bean 上定义和执行验证规则​​的规范
  • 704SJBH蓝天影院订票网站的设计
  • 极智项目 | 多模态大模型推理平台-Streamlit版(支持Qwen2.5/InternVL3/KimiVL三大模型)
  • b. 组合数
  • 第3节 Node.js 创建第一个应用
  • 六.MySQL增删查改
  • JWT 入门
  • 利用nginx完成iframe请求的身份认证
  • 【NLP 78、手搓Transformer模型结构】
  • Namespace 命名空间的使用
  • (7)-Fiddler抓包-Fiddler状态面板-QuickExec命令行
  • 项目日记 -Qt音乐播放器 -搜索模块
  • 如何手搓扫雷(待扩展)
  • pytest中的元类思想与实战应用
  • C++基础算法————贪心