C/C++的mem函数和strcpy函数的区别和应用(2)

4、这里有一个技巧,如果写成以下两种,面试的时候会大大扣分!

//第一种 while(*dst++ = *src++) //直接越界访问,没有检查指针的有效性 //第二种 while(*src!='\0'){*dst++ = *src++;}//考虑了src的边界问题,没有在dst的后面加'\0',会导致dst的长度未知引起错误

5、函数返回dst的原始值是为了能够支持链式表达式,增加了函数的附加性。

上述第5点可以用如下测试代码来说明:

int length = strlen(strcpy(strA,strB));//如果不支持链式表达式,这里会报错。

那么有时候也会问为什么不返回src的原始值,错误原因有以下三点:

源字符串本来就已知,返回没有什么意义

不能支持形如char * strA = strcpy(new char[10],strB) 这样的表达式

为了保护源字符串,使用const限定了src所指的内容,把const char作为char的返回值,类型不符,编译器会报错。

strcpy和memcpy的不同点

这个也是常见的考点,主要分为以下三点不同:

复制内容不同:strcpy只能复制字符串,而memcpy可以复制任何内容,例如字符数组,整型,结构体等

复制的方法不同:strcpy不需要指定长度,它遇到字符串结束符’\0’才结束,所以容易溢出。memcpy则需要传入第三个参数来指定长度

用途不同:通常在复制字符串的时候用strcpy,而需要复制其他数据类型的时候则一般用memcpy。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/86161f9442f870038f92a06bc7124bd2.html