C++面试八股文:memset、memcpy和strcpy的区别是什么?

某日小二参加XXX科技公司的C++工程师开发岗位4面:

面试官:memset、memcpy和strcpy的区别是什么?

小二:memset用于将一块内存设置为特定的值,

memcpy用于将一块内存从一个位置复制到另一个位置,

strcpy用于将一个字符串从一个位置复制到另一个位置。

面试官:嗯,不错。那么你知道这三个函数在使用时要注意哪些问题吗?

小二:呃。。。

面试官:好的,回去等通知吧。

这三个函数在C/C++开发中用到的频率比较高。

memset函数常用于POD类型对象的初始化,一般第二个参数都是0,第三个参数是这段内存的长度。

memcoy函数需要注意的点是,函数传入的源位置和目标位置不能有重叠,否则这种操作引发的结果无法预知。如果你不能够确定传入的源位置和目标位置是否存在重叠,那么可以使用memmove函数代替memcoy。

strcpy存在另一个问题,那就是源字符串的长度可能大于目标区域的长度,导致目标区域内存被超写,造成不可预知的错误。当然也可以通过使用strncpy函数传入目标区域的大小-1,如果源字符串的长度小于目标区域的大小-1,则全部拷贝,否则最多只拷贝目标长度-1的内容,保证目标字符串以0结尾。

小伙伴们,如果你是小二,你能比小二回答的更好吗?

关注我,带你21天“精通”C++!(狗头)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
strcpymemsetmemcpy是C语言中的三个常用函数。 strcpy函数用于将一个字符串复制到另一个字符串中。它的第一个参数是目标字符串,第二个参数是源字符串。strcpy只能复制字符串,复制的方法是遇到字符串结束符"\0"时结束。它的返回值是目标字符串的指针。\[1\] memset函数用于将一块内存区域的每个字节都设置为指定的值。它的第一个参数是要设置的内存区域的指针,第二个参数是要设置的值,第三个参数是要设置的内存区域的大小。memset可以用于任意类型的内存区域,不仅限于字符串。它的返回值是指向目标内存区域的指针。\[1\] memcpy函数用于将一个内存区域的内容复制到另一个内存区域中。它的第一个参数是目标内存区域的指针,第二个参数是源内存区域的指针,第三个参数是要复制的内存区域的大小。memcpy可以用于任意类型的内存区域,不仅限于字符串。它的返回值是指向目标内存区域的指针。\[1\] 总结起来,strcpy用于复制字符串,memset用于设置内存区域的值,memcpy用于复制内存区域的内容。它们在复制的内容、复制的方法和用途上有所区别。 #### 引用[.reference_title] - *1* *2* *3* [strcpymemcpymemset之间的区别](https://blog.csdn.net/weixin_40626724/article/details/90935128)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二进制编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值