strncpy函数的坑

c的库函数 strncpy(char* dest, char *src, int n),让人看一眼就觉得这个函数的行为应该是: 把src里的n个字节复制到dest中去,作用跟memcpy(char* dest, char *src, int n)一样. 其实是有区别的, strncpy会在n个字节复制完后,会追加一个0. 那我说的坑是: 如果strncpy在复制n个字节的过程中遇到0,则终止后续的字节复制,并在遇到0位置的后一位设置0,那么就是对dest写了两个0. 所以,对buffer复制,还是用memcpy. 下面用代码说明:

 char dest[10] = {0};
 char src[10] = {0};
 memcpy(src, "hellow!!!", 9);  //src的内容被设置
 src[5] = 0;//src的第6个字节被设置为0
 dest[6] = 'A';//dest的第7个字节被设置为A
 strncpy(buf1, sr, 9); //调用后, 在src的第6个位置遇到0,放弃了后续字节的复制,同时设置                        //dest的第7个位置为0(并不会因为在第6个位置有0而不对第7个位置设置0)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值