好长时间没有更新博客了,特别是这个专栏,一是因为自己比较忙,二是因为我还是比较懒的缘故。让各位见笑了。今天在更新一篇。
像什么strcpy、strcat等等字符串的操作和实现在面试中经常出现,不管是上机题还是笔试题。而今天在这里我将重点讲讲strcpy和memcpy的实现,而memset也会稍微提一下。
至于这几个函数,在实际的开发中,肯定不会让你亲力亲为的去实现,直接调用就ok了,但是在面试中这是一个考验你的编程基本功的过程。这三个函数的基本功能如下:
- strcpy:顾名思义,字符串的复制功能,这只是简单的这么说说
- memcpy:从名字也可以看出来,这个是内存的复制,这就说明,它不仅仅可以复制字符串,还可以复制数组、结构体等等类型
- memset:这个函数比较简单,可以说就是一个初始化的,或者说清空一个结构类型的变量或者是数组
考题形式1:请说说strcpy和memset的区别:考题形式2:请自己单独实现strcpy和memset的功能: 相对于这两种形式来说,形式2的考题价值很明显比形式1的大。
strcpy和memset的主要区别:
分一下三点来说;
一:复制内容不同:strcpy只能复制字符串,而memcpy可以复制任意内容。
二:复制方法不同:strcpy不需要指定长度,它遇到字符串结束符"\0"。
三:用途不同:通常在复制字符串时用strcpy,而需要复制其他类型用memset。
现在重点来讲讲实现吧。
一下是strcpy的原型,根据这个原型来实现:
char * strcpy(char *dest, const char *source) 实现代码如下: #include <iostream> using namespace std; char * strcpy(char *, const char *); int main() { char a[100]; char b[] = "GuoDong Young"; //memset(a, 0, sizeof(a)); strcpy(a, b); cout<<a<<endl; cout<<b<<endl; return 0; } char * strcpy(char *dest, const char *source) { //判断目标和源是否为空 if (dest == NULL || source == NULL) { return NULL; } char *strDest = dest; //保存目标地址 while ((*dest++ = *source++) != '\0'); *dest = '\0'; //添加一个结束标志 return strDest; }一下这个是memset的原型:
void * memcpy(void *to, const void *from, size_t size);实现过程如下:
#include <iostream> using namespace std; void * memcpy(void *to, const void *from, size_t size); int main() { char a[100]; char b[] = "宁采臣"; memset(a, 0, sizeof(a)); memcpy(a, b, 6); cout<<a<<endl; cout<<b<<endl; return 0; } void * memcpy(void *to, const void *from, size_t size) { //判断是否为空 if (to == NULL || from == NULL) { return NULL; } char *tempTo = (char *)to; char *tempFrom = (char *)from; while (size-- > 0) { *tempTo++ = *tempFrom++; } return to; } 现在基本写完了,你也不妨试一试。写写。好了,就到这里了,如果有问题,可以加QQ群:107133067其它博文,希望大家提出意见: