C++字符串复制/拷贝
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++字符串复制/拷贝相关推荐
- 字符串复制函数strncpy()和内存拷贝函数memcpy()
#include<string.h> char *strncpy(char *dest, const char *src, unsigned long n); 功能是将指针变量src所指向 ...
- Go 学习笔记(51)— Go 标准库之 strings(字符串比较、字符串前后缀、字符串统计、字符串索引、字符串包含、字符串转换、字符串复制、字符串替换、字符串去除、字符串分割和连接)
1. 概述说明 import "strings" strings 包实现了用于操作字符的简单函数. strings 包与 bytes 包中的函数用法基本一样. 2. 主要函数 2. ...
- Objective-C:OC内部可变对象和不可变对象的深(复制)拷贝问题思考:
OC内部:可变对象和不可变对象的深(复制)拷贝问题思考: 不可变对象: 例如NSString对象,因为NSString对象是常量字符串,所以,不可以更改其内容,但是可以修改指向该字符串的指针指向.当对 ...
- java IO之字节流和字符流-Reader和Writer以及实现文件复制拷贝
接上一篇的字节流,以下主要介绍字符流.字符流和字节流的差别以及文件复制拷贝.在程序中一个字符等于两个字节.而一个汉字占俩个字节(一般有限面试会问:一个char是否能存下一个汉字,答案当然是能了,一个c ...
- 字符串的复制,将一串字符串复制到另一串字符串中 c语言简单易懂
//① 题目叙述:编写一个函数_strcpy,其功能为将字符串 src 拷贝到字符数组 //target,函数原型声明为:void _strcpy(char* target, char* src): ...
- C语言:字符串API拷贝_strcpy(),strncpy,给(数组名)赋值字符串要用strcpy
1.字符串的拷贝API:strcpy() 不能给数组名赋值字符串的情况,要用strcpy,具体的请看下面 因为数组名是常量,不能直接赋值字符串 数组名是常量-详解,点击跳转 字符串常量: 1.与字符数 ...
- 字符串复制函数strdup和_strdup
字符串复制函数strdup和_strdup 函数原型 #include <string.h> char *strdup(const char *s); strdup()函数是c语言中常用的 ...
- 【glibc源码分析】--strcpy.c 字符串复制
strcpy是常用的字符串复制函数,经常在面试中考到.该文件位于glibc源码的string目录中. 在线资源路径: http://www.oschina.net/code/explore/glibc ...
- C语言:strcpy()---字符串复制
C语言 基础开发----目录 一.strcpy()简介 1. 函数原型 char *strcpy(char* dest, const char *src); 2. 参数 dest-指向用于存储复制内容 ...
最新文章
- Daily scrum[2013.11.28]
- OpenCV imgcodecs写入的实例(附完整代码)
- WordPress的Kyma plugin HTML发送的connect请求是怎么投递到PHP的
- linux文件基础知识,linux文件系统基础知识
- mongodb java 开源_开源的Mongodb java client -- mango发布
- 简述计算机模拟人类交流信息的过程,信息沟通
- r矢量球坐标系旋度_三个常用坐标系的认识及矢量旋度表达式的证明
- 一步一步实现KNN分类算法
- Ubuntu 字体安装以及 vscode字体配置
- i3wm 获取window class
- 【互联网协议】北邮国际学院大三上基础知识
- echarts x 起始_echarts实现获取datazoom的起始值(包括x轴和y轴)
- Ubuntu vdi硬盘扩容
- windows7以上平台 NDISFilter 网卡过滤驱动开发
- JavaScript - 解析JSON
- 多维度数据分析是什么?该怎么做?
- 惠州商贸旅游学校计算机网络,惠州商贸旅游高级职业技术学校
- 史上最全文本处理器盘点!(一)
- Android微信智能心跳方案 (转)
- 双节临近:“中秋节”如何装修你的手机端店铺?
热门文章
- 麦哥个人简介及代码获取方式
- java aero,小弟我们爱分享-Java调用C++ Dll 实现Win7 Aero透明玻璃效果(2)
- pymongo linux,centos安装PyMongo库
- Spark操作Kudu
- 1664_MIT 6.828 JOS页管理的相关行为实现
- Linux内核进程管理专题报告
- VSCode修改为背景透明图片
- 对期权价格计算的实现方式的思考
- 男粉适合去哪个贴吧引流?其中有什么套路?
- 凡人善举引领文明之风 山西介休举行“好人”颁奖典礼