随笔 - 576  文章 - 0  评论 - 62  阅读 - 219万

strcpy与strncpy

char aa[]="123456789123456789123456789";
char bb[4]={0};
1、strcpy(bb,aa); bb的空间,不能存下aa的内容,导致踩到aa的内存。如何解决这个问题?
2、使用strncpy,如下:
   strncpy(bb,aa,sizeof(bb)); 存在问题,bb的空间全部存储有效数据,没有预留\0的位置,strlen(bb)的长度是不确定的。如何解决这个问题?
3、使用strncpy(bb,aa,sizeof(bb)-1);
4、注意:strncpy(bb,aa,n); 表面意思是拷贝n个字节。实际上,不是这样。表示最多拷贝n个字节。如下:
   char aa[]="123456789123456789123456789";
   char bb[4]={0};
   strncpy(bb,aa,3); //拷贝3个字节,bb为 1,2,3,\0
   
   aa[1] = 0;
   strncpy(bb,aa,3); 按道理,应该拷贝3个字节,bb为1,\0,3,\0
   实际上,不是这样,而只是拷贝了1,\0, bb为1,\0,\0,\0
   也就是说,strncpy表示最多拷贝n个字节,来源的\0,会导致提前结束拷贝。
posted on   Andy Niu  阅读(358)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示