博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c/c++面试题(8)memcopy/memmove/atoi/itoa
阅读量:6120 次
发布时间:2019-06-21

本文共 1978 字,大约阅读时间需要 6 分钟。

1.memcpy函数的原型:

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

   返回值:返回dest;

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

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

#include 
#include
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 
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 
#include
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的原型:

 

    

 

转载于:https://www.cnblogs.com/yasanlun/p/3842523.html

你可能感兴趣的文章
预处理、const与sizeof相关面试题
查看>>
爬虫豆瓣top250项目-开发文档
查看>>
Elasticsearch增删改查
查看>>
oracle归档日志增长过快处理方法
查看>>
有趣的数学书籍
查看>>
teamviewer 卸载干净
查看>>
多线程设计模式
查看>>
解读自定义UICollectionViewLayout--感动了我自己
查看>>
SqlServer作业指定目标服务器
查看>>
UnrealEngine4.5 BluePrint初始化中遇到编译警告的解决办法
查看>>
User implements HttpSessionBindingListener
查看>>
抽象工厂方法
查看>>
ubuntu apt-get 安装 lnmp
查看>>
焊盘 往同一个方向增加 固定的长度方法 总结
查看>>
eclipse的maven、Scala环境搭建
查看>>
架构师之路(一)- 什么是软件架构
查看>>
jquery的冒泡和默认行为
查看>>
USACO 土地购买
查看>>
【原创】远景能源面试--一面
查看>>
B1010.一元多项式求导(25)
查看>>