文章目录
又到面试季了,很多小伙伴们准备跃跃欲试,那么我们准备好了吗?下面将总结一些嵌入式、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"