在嵌入式开发中比较 strncpy 和 memcpy 的区别
来源:互联网 发布:网络羽绒服品牌排行榜 编辑:程序博客网 时间:2024/06/05 23:40
先列出两个函数的原型
char *strncpy(char *dest,char *src,size_t n);void *memcpy(void *dest, const void *src, size_t n);
如果只是操作字符串,其实这两个函数差别不大,类型转换都不是问题。
有一点差别就是当你要拷贝大于原字符串长度的时候,也就是 n 大于原字符串长度,strncpy 会用 ‘\0’ 来填充,而 memcpy 则会在原字符串所在地址按照长度拷贝内存里的值,所以多余的字符是内存中不确定的值。
如果是在嵌入式编程里,差别就有点大了,而且也会容易疏忽这个问题。
嵌入式编程中常常使用十六进制数据,比如串口里不传输字符串,而是传输十六进制比特流。说到这你能想出两者的差别吗?
我要发送20个字节的16进制数,然后我可能还有个数据包头里面告诉你我传了20个字节。对方要把这20个字节拷贝到一个数组缓冲里面。
因为16进制流里难免出现0x00,如果用 strncpy 来拷贝数据,在出现0x00的地方就认为是字符串结束了,然后剩余的长度都会用0x00(‘\0’) 填充。而memcpy就不会出现这个问题。
例
数据流: a1 a2 a3 a4 a5 a6 a7 a8 a9 00 b0 b1 b2 b3 b4 b5 b6 b7 b8 b9
用strncpy之后:a1 a2 a3 a4 a5 a6 a7 a8 a9 00 00 00 00 00 00 00 00 00 00 00
用memcpy之后:a1 a2 a3 a4 a5 a6 a7 a8 a9 00 b0 b1 b2 b3 b4 b5 b6 b7 b8 b9
阅读全文
0 0
- 在嵌入式开发中比较 strncpy 和 memcpy 的区别
- strcpy、strncpy和memcpy的区别
- memcpy 与 strncpy的区别
- strncpy,strcpy,memcpy的区别
- strcpy、strncpy、memcpy的区别
- strcpy、strncpy、memcpy的区别
- strcpy、strncpy与memcpy的区别和使用方法
- strncpy和memcpy的异同
- 有关strncpy,memcpy,memmove的比较
- strcpy,strncpy和strncpy_s的区别 strncpy函数与memcpy函数
- memcpy && strncpy的区别,memcpy && strcpy的区别
- memcpy、strcpy和strncpy的简介
- C语言中比较重要的几个库函数strcpy strncpy memcpy等等
- 字符串拷贝函数memcpy和strncpy以及snprintf 的性能比较
- 字符串拷贝函数memcpy和strncpy以及snprintf 的性能比较
- strncpy和memcpy辨析
- strncpy和memcpy辨析
- memcpy 和 strncpy
- d3, geoJson 网站分享
- 洛谷 2285 打鼹鼠 递推? DP? 解题报告
- LeetCode718. Maximum Length of Repeated Subarray(Medium)
- 虔诚的墓主人 洛谷p2154
- lamp安装不上的问题(mysql也适用,不用重装ubuntu)
- 在嵌入式开发中比较 strncpy 和 memcpy 的区别
- idea设置main()方法快捷键
- zbar扫描java.lang.UnsatisfiedLinkError,无法找到so包
- H5-浮动和表单以及经纬度的查询
- 算法分析与设计——LeetCode:16. 3Sum Closest
- LINUX(CENTOS6.8固定ip方法)附录win方法
- Ubuntu Server安装图形界面全过程
- Intel Code Challenge Final Round Xor-matic Number of the Graph -- 线性基
- 在Android Studio中创建 java 项目