c/c++面试题(8)memcopy/memmove/atoi/itoa

1.memcpy函数的原型:

   void* memcpy(void* dest,cosnt void* src,size_t n);

   返回值:返回dest;

   功能:从源内存地址src拷贝n个字节到dest内存地址.

   这里必须要求源地址的内存和目标地址的内存没有覆盖,如果有覆盖结果是未定义的.

#include <stdio.h>
#include <assert.h>
void* my_memcpy(void* dest,const void* src,size_t n)
{
    assert(dest != NULL && src != NULL && n > 0);
    char* dest_t = (char*)dest;
    const char* src_t  = (char*)src;
    while(n--)
        *dest_t++ = *src_t++;
    return dest;
}
int main(void)
{
    char str[] = "abcedf";
    char  buf[20] = "aaaaaaaa";
    my_memcpy(str,buf,sizeof(str));
    printf("%s
",(char*)str);
    return 0;
}


2.memmove的原型:

   void* memmove(void* dest,const void* src,size_t n);

   和memcpy的功能差不多,只是多了一层考虑内存有覆盖的情况.

   如果dest比src小,就从低地址开始拷贝.

    如果dest比src大,就从高地址开始拷贝.

    如果dest和src一样,就不拷贝.

#include <stdio.h>
void* my_memmove(void* dest,const void* src,size_t n)
{
    char* d = (char*)dest;
    const char* s = (char*)src;
    if( d < s) //start copying  at begining while dest is little
    {
        while(n--)
            *d++ = *s++;
    }
    else if(d > s) //start copying at end while dest is bigger
    {
        d += n - 1;
        s += n - 1;
        while(n--)
            *d-- = *s--;
    }
    return dest;
}

3.atoi的原型:

  int my_atoi(char* pstr)

  功能:将字符串转换成整型数;atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负号

           才开始做转换,而遇到非数字或字符''结束转换,并将结果返回.(返回转换后的整型数);

#include <stdio.h>
#include <assert.h>
int my_atoi(char* pstr)
{
    assert(pstr != NULL);
    int res = 0;
    int sign = 1;
    while(*pstr == ' '|| *pstr == '	')
        pstr++;
    sign = (*pstr == '-'? -1 : 1); /*求得符号位置*/
    if(*pstr == '-' || *pstr == '+') /*跳过符号位置*/
        pstr++;
    while(*pstr != '' && *pstr >= '0' && *pstr <= '9')
    {
        res = *pstr - '0' + res*10;
        pstr++;
    }
    return sign*res; /*返回带符号的值*/
}
int main(void)
{
    char a[] = "-110000";
    char b[] = "  456";
    int c = 0;
    c = my_atoi(a);
    printf("%d
",c);
    c = my_atoi(b);
    printf("%d
",c);
    return 0;
}

4.itoa的原型:

 

    

原文地址:https://www.cnblogs.com/yasanlun/p/3842523.html