现在的位置: 首页 > 综合 > 正文

面试—每日一题(8)

2019年06月10日 ⁄ 综合 ⁄ 共 1648字 ⁄ 字号 评论关闭

  好长时间没有更新博客了,特别是这个专栏,一是因为自己比较忙,二是因为我还是比较懒的缘故。让各位见笑了。今天在更新一篇。

像什么strcpy、strcat等等字符串的操作和实现在面试中经常出现,不管是上机题还是笔试题。而今天在这里我将重点讲讲strcpy和memcpy的实现,而memset也会稍微提一下。

        至于这几个函数,在实际的开发中,肯定不会让你亲力亲为的去实现,直接调用就ok了,但是在面试中这是一个考验你的编程基本功的过程。这三个函数的基本功能如下:

  1. strcpy:顾名思义,字符串的复制功能,这只是简单的这么说说
  2. memcpy:从名字也可以看出来,这个是内存的复制,这就说明,它不仅仅可以复制字符串,还可以复制数组、结构体等等类型
  3. 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

其它博文,希望大家提出意见:

面试-每日一题(1)
面试-每日一题(2)
面试-每日一题(3)
面试-每日一题(4)
面试-每日一题(5)
面试-每日一题(6)
面试-每日一题(7)

在编程这一行,你必须知道的一些事情

抱歉!评论已关闭.