memcpy和strncpy有什么区别

本文详细介绍了C语言中memcpy和strncpy函数的区别,包括它们在拷贝字符串时的行为差异。memcpy简单直接,按指定字节数拷贝;而strncpy在遇到换行符时停止拷贝,并可能填充''。文章强调了使用这两个函数时需要注意的内存溢出和结束符问题,以及最佳实践建议。

memcpy和strncpy有什么区别

首先上一段代码示例:
在这里插入图片描述
如图上A B C三种情况分别操作后,szSource的值是什么?
A B两种情况执行后szSource结果不变,因为精准的按照7个字节拷贝,拷贝出去又拷贝回来,没有换行符(\0)
C情况因为sz2声明是8个字节,strcpy后把第8个字节的换行符拷贝过来了,所以szSource值是"USR1234"。

查了三个拷贝函数的实现:
在这里插入图片描述
strncpy 拷贝时,如果source字符串不够count长度,会补‘\0’,也就是换行符。拷贝时遇到换行符‘\0’也会结束拷贝动作。
在这里插入图片描述
memcpy就比较简单粗暴,直接拷贝count个字符,不管遇到什么都会继续拷贝。

在这里插入图片描述
拷贝方式和memcpy类似,但是拷贝时遇到换行符‘\0’会结束拷贝动作。

注意点:1.保证拷贝Dest字符串长度>=source串,否则可能会造成溢出。
2.char sz1[11],虽然有11字节长度,但是只能存10个字节,最后一个字节要留给‘\0’标识结束,否则拷贝时,碰不到结束符,会造成内存泄漏。
3.最好保证要拷贝的字节数量count<source 且count<dest,也是为了避免出现内存泄露情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值