• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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\n",(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字符串,跳过前面的空格字符,直到遇上数字或正负号

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

#include <stdio.h>
#include <assert.h>
int my_atoi(char* pstr)
{
    assert(pstr != NULL);
    int res = 0;
    int sign = 1;
    while(*pstr == ' '|| *pstr == '\t')
        pstr++;
    sign = (*pstr == '-'? -1 : 1); /*求得符号位置*/
    if(*pstr == '-' || *pstr == '+') /*跳过符号位置*/
        pstr++;
    while(*pstr != '\0' && *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\n",c);
    c = my_atoi(b);
    printf("%d\n",c);
    return 0;
}

4.itoa的原型:

 

    

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap