为什么嵌入式开发用memcpy()而不用strncpy()
- strcpy()
函数声明:char *strcpy(char *dest, const char *src)
返回参数:指向最终的目标字符串 dest 的指针。
注意事项:只能复制char类型的字符数组,unsigned char不可以!
以\0作为复制的结尾,注意判断溢出。 - strncpy()
函数声明:char *strncpy(char *dest, const char *src, size_t n)
返回参数:指向最终的目标字符串 dest 的指针。
注意事项:只能复制char类型的字符数组,unsigned char不可以!
n表示要复制的字节数,中途遇到'\0'会停止。 - memcpy()
函数声明:void *memcpy(void *str1, const void *str2, size_t n)
返回参数:无
注意事项:无复制类型的限制,一般内存内容均可。
n表示要复制的字节数。
为什么嵌入式开发中尽量不要用strcpy()和strncpy()?
(记录一个最近在调CAN总线相关程序遇到的坑)
我们知道strcpy和strncpy都以‘\0’为结尾标志,也就是说无论你指不指定拷贝的字节数,遇到\0都会自动结束拷贝,剩余的字符用'\0'填充。
在嵌入式开发中我们大量的用到16进制的数据,所以很可能出现0x00这个数据,而0x00恰好就是'\0',所以就会造成数据的错误,所以在嵌入式开发中,我们最好用memcpy不会出现这个问题。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」