关于strcpy函数和strcat函数的使用、实现

  • 一、strcpy函数
    • 1.1代码展现
    • 1.2注意要点
      • 1.2.1源字符串必须以\0结束
      • 1.2.2会将源字符串中的\0拷贝到目标空间
      • 1.2.3目标空间必须足够大,以确保能够存放源字符串
      • 1.2.4目标空间必须可改变
    • 1.3实现
  • 二、strcat函数
    • 2.1代码展现
    • 2.2注意要点
      • 2.2.1目标空间必须有足够大的空间
      • 2.2.2源字符串必须以\0结束
      • 2.2.3目标空间必须可改变
      • 2.2.4不能自己给自己追加
    • 2.3实现

一、strcpy函数

strcpy函数的作用是复制字符串,strcpy是C语言的一个标准库函数 ,strcpy把含有’\0’结束符的字符串复制到另一个地址空间,返回值的类型为char*。它是string copy(字符串复制)的缩写。

1.1代码展现

#include<stdio.h>
int main()
{char arr1[] = "abcdefghi";char arr2[] = "boy";strcpy(arr1, arr2);//我们要把arr2拷贝到arr1中,希望arr1变成boy,而不是boydefghi,所以要把arr2的\0也拷贝过去printf("%s", arr1);return 0;
}

1.2注意要点

1.2.1源字符串必须以\0结束

举个反例,见代码:

#include<stdio.h>
int main()
{char arr1[] = "abcdefghi";char arr2[] = {'b','o','y'};strcpy(arr1, arr2);//源字符串arr2中不包含\0,当程序运行起来的时候,会一直往后越界访问,直到遇到\0,函数才会结束printf("%s", arr1);return 0;
}

程序会紊乱,arr1将变得很“奇怪”!

1.2.2会将源字符串中的\0拷贝到目标空间

arr2中的’b’,‘o’,‘y’,'\0’一起被拷贝到arr1中,并替换掉arr1中的前四个元素。
实际上是arr1变成了 ‘b’ ‘o’ ‘y’ ‘\0’ ‘e’ ‘f’ ‘g’ ‘h’ ‘i’ ‘\0’,遇到第一个\0便不再往下访问了,所以arr1打印出boy

1.2.3目标空间必须足够大,以确保能够存放源字符串

举个反例,见代码:

#include<stdio.h>
int main()
{char arr1[] = "a";char arr2[] = "boy";strcpy(arr1, arr2);//源字符串比目标字符串大,当函数运行起来的时候会越界访问,程序报错printf("%s", arr1);return 0;
}

程序报错:

1.2.4目标空间必须可改变

同样举个反例:

#include<stdio.h>
int main()
{char* arr1 = "abcdefghi";char arr2[] = "boy";strcpy(arr1, arr2);//目标字符串arr1内容不可被改变,此时运行程序会崩溃printf("%s", arr1);return 0;
}

程序崩溃,在visual studio2022不输出任何内容。

1.3实现

//模拟实现
#include<stdio.h>
#include<assert.h>
char* my_strcpy(char* dest, const char* src)
{assert(dest);assert(src);char* ret = dest;//拷贝src指向的字符串到dest指向的空间,包括\0while (*dest++ = *src++)//比如当把元素b拷贝过去时候,该式子的结果就是b,把\0拷贝过去时,结果就是0{;}//返回目的地的空间的起始地址return ret;
}
int main()
{char arr1[] = "abcdefghi";char arr2[] = "boy";my_strcpy(arr1, arr2);printf("%s", arr1);
}

二、strcat函数

strcat是字符串连接函数,把src所指向的字符串(包括“\0”)复制到dest所指向的字符串后面(删除* dest原来末尾的“\0”)。要保证* dest足够长,以容纳被复制进来的*src。*src中原有的字符不变。返回指向dest的指针。

2.1代码展现

#include<stdio.h>
int main()
{char arr1[20] = "hello";char arr2[] = "world";strcat(arr1, arr2);printf("%s\n", arr1);return 0;
}

2.2注意要点

2.2.1目标空间必须有足够大的空间

目标空间要容得下目标空间的字符串加上源字符串
举个反例:

#include<stdio.h>
int main()
{char arr1[] = "hello";char arr2[] = "world";//目标空间必须足够大。目标空间太小了,无法容下helloworldstrcat(arr1, arr2);printf("%s\n", arr1);return 0;
}

此时程序报错:

2.2.2源字符串必须以\0结束

这里的道理和上面strcpy函数一样,不再举例了。(见上文1.2.1)

2.2.3目标空间必须可改变

道理同样和strcpy函数一样,也不再重复了。(见上文1.2.4)

2.2.4不能自己给自己追加

(请参考下面的图和实现代码)
当使用strcpy,arr1自己给自己追加时,'h’覆盖了‘\0’,于是arr1就没有\0了,于是这个函数永远都不会停下来,程序崩溃!

2.3实现

#include<stdio.h>
#include<assert.h>
char* my_strcat(char* dest, const char* src)
{assert(dest && src);char* ret = dest;//1、找到目的字符串的\0while(*dest!='\0'){dest++;}//2、追加while(*dest++=*src++){;}return ret;
}
int main()
{char arr1[30] = "hello";char arr2[] = "world";//调试时打开监视,若某一个x变成了\0,则说明\0也被传递过去了。my_strcat(arr1, arr2);printf("%s\n", arr1);return 0;
}

strcpy函数和strcat函数的使用及实现相关推荐

  1. c语言 strcpy原型,浅谈C语言中strcpy,strcmp,strlen,strcat函数原型

    实例如下: //strcat(dest,src)把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0' char *strcat(char * strDest, cons ...

  2. strlen函数,strcat函数,strcpy函数,strncpy函数,strcmp函数

    strcpy函数: char *strcpy(char *Dest , const char *Src) { assert((Dest != NULL) && (Src != NULL ...

  3. strcpy函数和strcat函数

    strcat函数: 将两个char类型连接. char d[20]="GoldenGlobal"; char *s="View"; strcat(d,s); 结 ...

  4. strlen函数,strcpy函数,strcat函数,memset函数,strcmp函数,memcpy函数,memove()函数

    文章目录 一,strlen函数(库函数头文件<string.h>) 二,strcpy函数(库函数头文件<string.h>)拷贝函数 三,strcat函数(头文件是<st ...

  5. 字符串函数:strlen函数,strcpy函数,strcat函数,strcmp函数

    目录: 1.字符串函数strlen (1)strlen函数 (2)strlen的使用 a.代码 b.运行结果 (3)模拟实现strlen函数 a.代码 b.运行结果 (4)注意: 2.字符串函数str ...

  6. strcpy.strcmp.strlen.strcat函数的实现

    #include <stdio.h> #include <string.h> char *copy(char *a,char *b);//声明一个复制函数 char *cat( ...

  7. C语言 strcat 函数 - C语言零基础入门教程

    目录 一.strcat 函数简介 二.strcat 函数原理 三.strcat 函数实战 四.注意 strcat 函数崩溃问题 五.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 ...

  8. strcat函数oracle,实现strcat函数

    关于C语言字符串函数使用的一点心得 就字符串的拼接函数为例strcat. 原型:extern char *strcat(char *dest,char *src);用法:#include <st ...

  9. strcat函数及其模拟

    strcat是字符串追加函数 1.strcat函数的参数以及返回值 1.1参数: 函数的参数分别是目的(destination)字符串的地址,以及被拼接(source)的字符串的地址. 此外,由于我们 ...

最新文章

  1. 1分钟构建API网关日志解决方案
  2. Windows 下安装 Redis
  3. netlink怎么读_ovs源码阅读--netlink使用
  4. boost::hash_combine模块实现json哈希值的测试程序
  5. android资源包混淆,Android---andresguard资源混淆
  6. Windows Mobile 6中禁用键盘或者是禁用某些按键(C#)
  7. 构建之法:1、2、3章阅读后感
  8. python在线编辑器-在线python编辑器
  9. python中arcpy_如何使用ArcPy?
  10. Python 数据可视化学习笔记 之高维数据可视化及其方法
  11. 预充电电路工作原理_变频器整流回路 为什么要预充电电路-工业支持中心-西门子中国...
  12. ACM比赛完了后怎么办
  13. SAP中通过定制开发在寄售结算MRKO中实现发票校验功能
  14. Admiral UVA - 1658
  15. 12条标准判定穷富:整天工作的人当不了富翁
  16. 华为内部的项目管理之沟通流程
  17. INFO client.DefaultNoHARMFailoverProxyProvider: Connecting to ResourceManager at 错误的解决方法
  18. What inspires designers? Preferences on inspirational approaches during idea generation
  19. IOS app自动化
  20. 可怕 !FaceBook 工程师上班跳楼自杀,北美这是怎么了

热门文章

  1. Android-京东秒杀
  2. linux脚本格式for循环,Linux Shell脚本之for循环
  3. uni-app动态设置页面导航
  4. 决胜B端(二)设计篇-从业务诊断到形成方案-调研
  5. 【转】人工智能在网络攻防领域的应用及问题分析
  6. 基于Android的旅游助手app酒店景点预订系统(计算机毕业设计)
  7. linux 升级git
  8. android手机 usb hub,绿联PD HUB,让手机秒变台式机电脑般体验的利器
  9. MediBang Paint Pro超级精简版/超精简/懂你版
  10. 枪神纪显示正在启动服务器,枪神纪颠覆封测正式开启 常见问题整理大全