snprintf

sprintf不能检查目标字符串的长度,可能造成众多安全问题, snprintf是的sprintf的安全版本,他的特点是安全,不管怎么着,它都能保证结果串str以\0结尾,哪怕dst_size不够大,它都能做好截断,同时在末尾添加上\0。

int snprintf(char *str, size_t size, const char *format, ...);

函数说明:
最多从源串中拷贝size-1个字符到目标串中,然后再在后面加一个\0。所以如果目标串的大小为size的话,将不会溢出。

函数返回值:
若成功则返回欲写入的字符串长度,若出错则返回负值。

性能:
当source_str远长于dst_size时,该函数却很低效的,其他情况下该函数即安全又高效。
当source_str远长于dst_size时,该函数低效,是因为该函数的返回值为source_str的长度,那么它就必须将source_str全部过一遍,哪怕并不拷贝到dst_str中去。
注意,当source_str长度比dst_size小时,它不会把末尾的多余字符置零,所以它是很高效的,不会多做无用功。

char source='s';
char str[3];                                //长度做好是sizeof(source) + 1,再大点也没有问题,因为snprintf最多从源串中拷贝size-1个字符到目标串中;
snprintf(str,sizeof(str),"%s",source);        //建议size位传入sizeof(str),源串中拷贝size-1个字符到目标串中

memcpy

从源source所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中

void *memcpy(void *destin, const void *source, int n);

函数返回一个指向dest的指针。
1.source和destin所指内存区域不能重叠,函数返回指向dest的指针。   
2.与strcpy相比,memcpy并不是遇到’\0’就结束,而是一定会拷贝完n个字节。   
3.如果目标数组dest本身已有数据,执行memcpy()后,将覆盖原有数据(最多覆盖n)。如果要追加数据,则每次执行memcpy后,要将目标数组地址增加到你要追加数据的地址。

字符串拷贝函数memcpy()、strncpy()和snprintf()性能之比较
在需要用到字符串拷贝函数的时候,永远不要使用strncpy(),无论什么时候都用snprintf()来代替,而memcpy()是性能更好的实现方式。

来都来了,点个赞再走吧!
创作不易,多谢支持~

C++字符串复制/拷贝相关推荐

  1. 字符串复制函数strncpy()和内存拷贝函数memcpy()

    #include<string.h> char *strncpy(char *dest, const char *src, unsigned long n); 功能是将指针变量src所指向 ...

  2. Go 学习笔记(51)— Go 标准库之 strings(字符串比较、字符串前后缀、字符串统计、字符串索引、字符串包含、字符串转换、字符串复制、字符串替换、字符串去除、字符串分割和连接)

    1. 概述说明 import "strings" strings 包实现了用于操作字符的简单函数. strings 包与 bytes 包中的函数用法基本一样. 2. 主要函数 2. ...

  3. Objective-C:OC内部可变对象和不可变对象的深(复制)拷贝问题思考:

    OC内部:可变对象和不可变对象的深(复制)拷贝问题思考: 不可变对象: 例如NSString对象,因为NSString对象是常量字符串,所以,不可以更改其内容,但是可以修改指向该字符串的指针指向.当对 ...

  4. java IO之字节流和字符流-Reader和Writer以及实现文件复制拷贝

    接上一篇的字节流,以下主要介绍字符流.字符流和字节流的差别以及文件复制拷贝.在程序中一个字符等于两个字节.而一个汉字占俩个字节(一般有限面试会问:一个char是否能存下一个汉字,答案当然是能了,一个c ...

  5. 字符串的复制,将一串字符串复制到另一串字符串中 c语言简单易懂

    //① 题目叙述:编写一个函数_strcpy,其功能为将字符串 src 拷贝到字符数组 //target,函数原型声明为:void _strcpy(char* target, char* src): ...

  6. C语言:字符串API拷贝_strcpy(),strncpy,给(数组名)赋值字符串要用strcpy

    1.字符串的拷贝API:strcpy() 不能给数组名赋值字符串的情况,要用strcpy,具体的请看下面 因为数组名是常量,不能直接赋值字符串 数组名是常量-详解,点击跳转 字符串常量: 1.与字符数 ...

  7. 字符串复制函数strdup和_strdup

    字符串复制函数strdup和_strdup 函数原型 #include <string.h> char *strdup(const char *s); strdup()函数是c语言中常用的 ...

  8. 【glibc源码分析】--strcpy.c 字符串复制

    strcpy是常用的字符串复制函数,经常在面试中考到.该文件位于glibc源码的string目录中. 在线资源路径: http://www.oschina.net/code/explore/glibc ...

  9. C语言:strcpy()---字符串复制

    C语言 基础开发----目录 一.strcpy()简介 1. 函数原型 char *strcpy(char* dest, const char *src); 2. 参数 dest-指向用于存储复制内容 ...

最新文章

  1. Daily scrum[2013.11.28]
  2. OpenCV imgcodecs写入的实例(附完整代码)
  3. WordPress的Kyma plugin HTML发送的connect请求是怎么投递到PHP的
  4. linux文件基础知识,linux文件系统基础知识
  5. mongodb java 开源_开源的Mongodb java client -- mango发布
  6. 简述计算机模拟人类交流信息的过程,信息沟通
  7. r矢量球坐标系旋度_三个常用坐标系的认识及矢量旋度表达式的证明
  8. 一步一步实现KNN分类算法
  9. Ubuntu 字体安装以及 vscode字体配置
  10. i3wm 获取window class
  11. 【互联网协议】北邮国际学院大三上基础知识
  12. echarts x 起始_echarts实现获取datazoom的起始值(包括x轴和y轴)
  13. Ubuntu vdi硬盘扩容
  14. windows7以上平台 NDISFilter 网卡过滤驱动开发
  15. JavaScript - 解析JSON
  16. 多维度数据分析是什么?该怎么做?
  17. 惠州商贸旅游学校计算机网络,惠州商贸旅游高级职业技术学校
  18. 史上最全文本处理器盘点!(一)
  19. Android微信智能心跳方案 (转)
  20. 双节临近:“中秋节”如何装修你的手机端店铺?

热门文章

  1. 麦哥个人简介及代码获取方式
  2. java aero,小弟我们爱分享-Java调用C++ Dll 实现Win7 Aero透明玻璃效果(2)
  3. pymongo linux,centos安装PyMongo库
  4. Spark操作Kudu
  5. 1664_MIT 6.828 JOS页管理的相关行为实现
  6. Linux内核进程管理专题报告
  7. VSCode修改为背景透明图片
  8. 对期权价格计算的实现方式的思考
  9. 男粉适合去哪个贴吧引流?其中有什么套路?
  10. 凡人善举引领文明之风 山西介休举行“好人”颁奖典礼