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

C语言—strcpy,strncpy函数介绍、以及自己实现字符串的拷贝代码演示

目录

一、strcpy函数介绍

二、与strncpy的区别

三 、 实现自己的strcpy

代码演示:

四、实现自己的strncpy

代码演示


一、strcpy函数介绍

函数原型: char*strcpy(char*dest,const char*src)   //将src复制到dest字符数组中
头  文  件:#include <string.h>
返  回  值:char* 类型,返回的是第一个参数的值,即目的数组的首地址;

注 意:
1、strcpy只用于字符串复制,遇到‘\0’时停止,还会复制字符串的结束符'\0'; 所以源字符串必须         以’\0’结束,也会将源字符串的’\0’拷贝到目标空间
2、目标空间必须可变
3、如果参数dest所指的内存空间不够大,可能会造成缓冲溢出的错误情况,在编写程序时需特别       留意,或者用strncpy()来代替
 

二、与strncpy的区别


1、strcpy() 函数用来复制字符串;strncpy()用来复制字符串的前n个字符,所以要多传一个参数n

     大家可以对比一下两个函数原型:

    char *strcpy(char *dest, const char *src);

    char * strncpy(char *dest, const char *src, size_t n);

2、不像strcpy(),strncpy()不会向dest追加结束标记'\0'


————————————————
版权声明:本文为CSDN博主「lambo mercy」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_65601072/article/details/123967796

三 、 实现自己的strcpy

代码演示:

#include<stdio.h>
#include<string.h>char* mystrcpy(char *data,char *data2)   //第一种,实现字符串拷贝
{if(data == NULL || data2 == NULL){		return NULL;}char *p = data;while(*data2 != '\0'){   //!!!!!   while(p != '\0'){   逻辑错误!!!!!*p = *data2;p+1;data2+1;}*p = '\0'; return data;
}char* mystrcpy2(char *data,char *data2)
{if(data == NULL || data2 == NULL){		return NULL;}char *p = data;while(*data2 != '\0'){   *p++ = *data2++;}*p = '\0'; return data;
}char* mystrcpy3(char *data,char *data2)
{if(data == NULL || data2 == NULL){		return NULL;}char *p = data;while(  (*p++ = *data2++)  !=  '\0')      //记住这种写法while(  (*p++ = *data2++)*p = '\0'; return data;
}int main()
{char arr[128] = {'\0'};char *p = "yyds666666888";//mystrcpy (arr,p);//第一种写法,实现字符串拷贝// mystrcpy2(arr,p);//第二种,实现字符串拷贝mystrcpy3(arr,p);//第三种,实现字符串拷贝//strcpy(arr,p);printf("arr %s",arr);return 0;
}//7.6字符串的拷贝

运行结果:

arr yyds666666888

四、实现自己的strncpy

代码演示

#include<stdio.h>
#include<string.h>char* mystrcpy4(char *data,char *data2,int number)
{if(data == NULL || data2 == NULL){  //先判断data是否是野指针,如果是野指针下面的执行copy字符串毫无意义return NULL;}char *p = data;   //先保存一个字符串数组arr地址,对进行copy偏移操作,//mystrcpy4函数中形式参数char *data,保存的是arr起始地址,不要动,//结束copy的操作时候需要返回arr的开头地址while(*data2 != '\0'  &&  number>0){   *p++ = *data2++;number--;}/*	while(*data2 != '\0'){   if(number == 0){break;}*p++ = *data2++;number--;}*/if(number>0){while(number>0){*p++ = '\0';number--;}return data;}*p = '\0'; return data;
}int main()
{char arr[128] = {'\0'};char *p = "yyds666666888";mystrcpy4(arr,p,4);   //把字符串p的内容,拷贝到arr ,并且拷贝四个	//strcpy(arr,p);printf("arr %s",arr);return 0;
}//7.6字符串的拷贝

运行结果:

arr yyds

http://www.lryc.cn/news/2415170.html

相关文章:

  • 深度剖析 Go 的 nil
  • 什么是哈希算法sha2?和sha1什么区别?SHA2代码签名?sha3又是什么?
  • Linux C语言运行库 glibc
  • YOLOv5输入端(一)—— Mosaic数据增强|CSDN创作打卡
  • AS2安全基础知识
  • JPEG文件格式分析及举例验证
  • 使用CCProxy代理局域网上网
  • GCD详解,多种
  • 缠中说禅:缠非缠、禅非禅,枯木龙吟照大千(整理版)
  • pm2常用命令及pm2自启动
  • rollup - 构建原理及简易实现
  • Java 中正则表达式的详解
  • STM32开发(五)STM32F103 通信 —— CAN通信编程详解
  • mysql instr使用
  • ubuntu新手教程(从安装系统到驱动安装到环境搭建)
  • Kotlin-简约之美-进阶篇(十六):DSL原理解析
  • 一个完整的http协议中都包含什么?
  • SQLServer附加数据库5120错误
  • 快速剖析贪心算法(C语言)
  • MVC介绍
  • android xvideo app,xvideo downloader and player
  • 大数据入门系列 3:全网最全,Ubuntu 安装 VMware Tools 完整步骤及需要注意的问题_ubuntu中怎么检测vmware tools是否安装好
  • makefile基础知识
  • JDK安装配置教程(保姆级)
  • 【ViT系列(2)】ViT(Vision Transformer)代码超详细解读(Pytorch)
  • OPC基本知识介绍——什么是OPC
  • Tornado介绍
  • Nacos篇五 - Nacos集群(Linux下standalone模式和cluster模式)
  • 全面文档格式处理工具Aspose最新中文教程指南请查收!
  • LTspice基础教程-007.voltage电压源基本设置