嵌入式基础面经


又到面试季了,很多小伙伴们准备跃跃欲试,那么我们准备好了吗?下面将总结一些嵌入式、Linux方面的面试题,巩固一下基础,将一些零碎的知识点集中到一起,方便查阅。

memmove 和 memcpy的区别

memmove也是用来实现内存拷贝的,他们的作用是一样的,区别是,当内存发生局部重叠的时候,memmove保证拷贝的结果是正确的,memcpy不保证拷贝的结果的正确。

  • dst < src:就需要先从src的头部开始复制;也就是memmove源码中的if分支,这部分源码和memcpy的实现是一致的
  • dst > src:就需要先从src的尾部开始复制,防止出现覆盖现象。这就是memmove比memcpy多的一个考虑点,所以说,在实际使用时,使用memmove是比memcpy更安全的
    在这里插入图片描述
void  *memcpy(void *dest, const void *src, size_t count)
{
   
	assert(dest != NULL || src != NULL);

	char *tmp = (char *)dest;
	char *p = (char *)src;
	while (count--)
	{
   
		*tmp++ = *p++;
	}
	return dest;
}

void *memmove(void *dest, const void *src, size_t count)
{
   
	assert(dest != NULL || src != NULL)

	if (dst < src)
	{
   
		char *p = (char *)dest;
		char *q = (char *)src;
		while (count--)
		{
   
			*p++ = *q++;
		}
	}
	else
	{
   
		char *p = (char *)dest + count;
		char *q = (char *)src + count;
		while (count--)
		{
   
			*--p = *--q;
		}
	}
	return dest;
}

strcpy函数实现

char * strcpy(char *dst,const char *src)   
{
   
	//assert( (strDest != NULL) && (strSrc != NULL) );
    if((dst==NULL)||(src==NULL)) return NULL; 
           
    char *ret = dst; 
    while ((*dst++=*src++)!='\0'); 
    return ret;
}

atoi 函数实现

atoi()函数的功能:将字符串转换成整型数;atoi()会扫描参数ptr字符串,跳过前面的空格字符,直到遇上数字或正负号才开始做转换,而再遇到非数字或字符串时(’\0’)才结束转化,并将结果返回。

int atoi(char* pstr)
{
   
	long long Integer = 0;
	int sign = 1;
	
	if(pstr == NULL)
	{
   
		printf("Pointer is NULL\n"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值