回 帖 发 新 帖 刷新版面

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


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


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

小二:memset用于将一块内存设置为特定的值,memcpy用于将一块内存从一个位置复制到另一个位置,strcpy用于将一个字符串从一个位置复制到另一个位置。

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

小二:呃。。。

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


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


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


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


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


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



回复列表 (共1个回复)

沙发

<顺便吆喝一句,民族企业大厂,前后端测试捞人,感兴趣的来!>

我来回复

您尚未登录,请登录后再回复。点此登录或注册