1、strcpy
原型声明:

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

功能:将以src为首地址的字符串复制到以dst为首地址的字符串,包括’\0’结束符,返回指向dest的指针。
不安全原因:依据源串的\0作为结束判断的,不会检查需要拷贝的缓冲区的大小,如果目标空间不够,就有溢出问题。
局限:只能将两个字符串进行完整的复制和赋值,不能实现仅复制某个字符串的前几个字符。
要求:src和dst所指内存区域不可以重叠且dst必须有足够的空间来容纳src的字符串。
头文件:c++: #include c:#include <string.h>

2、strcpy_s
strcpy_s和strcpy的主要区别:strcpy函数没有方法来保证有效的缓冲区尺寸,所以它只能假定缓冲足够大来容纳要拷贝的字符串。用strcpy_s就可以避免这些不可预料的行为。当存在缓存区溢出的问题时(即src的长度大于dst的长度),strcpy_s()会抛出异常;而strcpy()结果则未定,因为它错误地改变了程序中其他部分的内存的数据,可能不会抛出异常但导致程序数据错误,也可能由于非法内存访问抛出异常。
原型:
三个参数时:

strcpy_s( char *strDestination, size_t numberOfElements, const char *strSource );

两个参数时:

strcpy_s( char (&strDestination)[size], const char *strSource ); // C++ only

风险:非C标准函数

2、strncpy
原型:

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

功能:
从以src为首地址的字符串中至多复制n个字符到以dst为首地址的字符串,返回指向dest的指针。具体而言:如果在[0,n]之间没有’\0’结束符,则dst中没有结束符;如果遇到空字符(‘\0’),则把\0复制进去,空字符后面为原来的字符;如果src<n个字节,则以NULL填充dest直到复制完n个字节;如果src>n的长度,只是将src的前n个字符复制到dest的前n个字符,不自动添加’\0’(即结果dest不包括’\0’,需手动添加’\0’),dst输出时会出现乱码,直至碰到’\0’结束符为止。
要求:
src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符长度+‘\0’。
strncpy和strcpy的主要区别:strncpy多了一个参数n(第3个参数),可以指定要从src(源字符串)拷贝的字符个数。
风险:strncpy 不检查 dest 中是否有足够的空间,这将潜在导致缓冲区溢出。
头文件:来自C语言标准库,定义于 string.h
举例:

char s[20];
strcpy_s(s, sizeof(s), "AA BB CC"); // "AA BB CC"
strncpy(s, "tt", 2); // "tt BB CC"
strncpy(s, "rr", 3); // "rr"

4、strncpy_s
原型:

strncpy_s(char * str2, int size2, char * str1, int size1);

简而言之,如果你想寻求一种安全的字符串拷贝方法,可以:

//dst是字符数组char[]
std::string idString = "abc";
strncpy(dst, idString.c_str(), sizeof(dst) - 1);
dst[sizeof(dst) - 1] = 0;

参考:https://www.cnblogs.com/fortunely/p/14515340.html

strcpy、strcpy_s、strncpy、strncpy_s 字符串拷贝用法相关推荐

  1. C++ strcpy strcpy_s strncpy strlcpy

    strncpy的用法:它与strcpy的不同之处就在于复制n个字符,而不是把所有字符拷贝(包括结尾'\0'). 函数原型:char * strncpy(char *dst,const char * s ...

  2. strcpy、strncpy、strncpy_s和snprintf

    1.strcpy 原型声明: extern char *strcpy(char* dest, const char *src); 依据源串的\0作为结束判断的,不会检查需要拷贝的缓冲区的大小,如果目标 ...

  3. strcpy,strncpy和strncpy_s的区别 strncpy函数与memcpy函数

    首先说下strcpy strcpy()是依据源串的\0作为结束判断的,不检查copy先的Buffer的Size,如果目标空间不够,就有BufferOverflow问题. strncpy的原型为: ch ...

  4. strcpy()、strncpy()函数

    本片博客简单写下关于strcpy().strncpy()两函数的用法.区别及使用时需要注意的地方. 一.使用介绍 1. strcpy()函数用法 char * strcpy ( char * dest ...

  5. linux strcpy 用法,由Linux中管道的buffer,浅谈C语言中char类型字符串拷贝使用strcpy()和=赋值符号的区别...

    今天在写父子进程用两个单向管道通信时,出现了错误: Segmentation fault (core dumped) 打开core文件发现: 附上源码: 1 #include 2 #include 3 ...

  6. stpcpy和stpncpy用法 strcpy和strncpy用法

    文章目录 strncpy, strncpy_s参考文档用法 strcpy, strncpy实例 strcpy, strncpy用法举例 运行结果 stpcpy()和stpncpy()用法上的区别(C语 ...

  7. 函数 —— strncpy() (内存重叠) memcpy() memmove() 一个字符串拷贝给另一个字符串

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

  8. C语言strcpy_s 和strncpy_s的用法,以及函数实现的方法

    //strcpy_s 和strncpy_s的用法,以及函数实现的方法 #include<stdio.h> #include<stdlib.h> #include<stri ...

  9. c语言 字符串 strncpy,详解c语言中的 strcpy和strncpy字符串函数使用

    详解c语言中的 strcpy和strncpy字符串函数使用 strcpy 和strcnpy函数--字符串复制函数. 1.strcpy函数 函数原型:char *strcpy(char *dst,cha ...

最新文章

  1. pythonbyte连接_Python3之字节串bytes与字节数组bytearray的使用详解
  2. 独家 | 菜鸟必备的循环神经网络指南(附链接)
  3. windows下使用svn命令行
  4. 】.NET使用NPOI组件将数据导出Excel
  5. Android 六大布局之 LinearLayout( 线性布局)
  6. 在线直播系统网站源码搭建一个点播跟直播流媒体服务器
  7. H3C交换机配置SSH
  8. mac系统下配置java 和maven环境变量
  9. android 主题颜色意义
  10. 企业邮箱注册—企业微信邮箱2.0时代正式来临!
  11. 扦插机器人_如何看待我国农业采摘机器人发展趋势?
  12. 【科创人】DCloud崔红保:uni-app和HBuilder背后的男人,让天下没有难做的开发
  13. 华为手机android7价格,华为7怎么样?报价多少?
  14. 向上的路,从来都不好走(好文力荐)
  15. ug怎么画曲线_120种UG表达式曲线画法
  16. 【计网知识点总结】2 物理层
  17. Cisco vPC 技术
  18. 织梦DedeCMS在自定义表单里加入验证码的方法
  19. P2161 [SHOI2009]会场预约[线段树/树状数组+二分/STL]
  20. WIFI6网卡(AX201)无法连接2.4GHz老式路由器解决办法

热门文章

  1. 遍历Python字典
  2. ZZULIOJ-1012,求绝对值(Java)
  3. Citrix XenApp - VM Hosted Apps
  4. 物联卡管理系统都有什么功能,物联卡后台使用说明
  5. 华为鸿蒙电脑操作系统测试版,华为鸿蒙OS测试
  6. JAVA父类引用指向子类的对象是什么意思?有什么作用?
  7. linux sftp拷贝文件夹,Linux下sftp命令传输文件的例子
  8. 查询国际学术会议的信息
  9. 怎么让python播放音频_用Python播放音频
  10. IOS Label下划线 中划线