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[] = "aaaaaaaa";
my_memcpy(str,buf,sizeof(str));
printf("%s\n",(char*)str);
return ;
}
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 - ;
s += n - ;
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 = ;
int sign = ;
while(*pstr == ' '|| *pstr == '\t')
pstr++;
sign = (*pstr == '-'? - : ); /*求得符号位置*/
if(*pstr == '-' || *pstr == '+') /*跳过符号位置*/
pstr++;
while(*pstr != '\0' && *pstr >= '' && *pstr <= '')
{
res = *pstr - '' + res*;
pstr++;
}
return sign*res; /*返回带符号的值*/
}
int main(void)
{
char a[] = "-110000";
char b[] = "";
int c = ;
c = my_atoi(a);
printf("%d\n",c);
c = my_atoi(b);
printf("%d\n",c);
return ;
}
4.itoa的原型:
c/c++面试题(8)memcopy/memmove/atoi/itoa的更多相关文章
- 转载 C++常用库函数atoi,itoa,strcpy,strcmp的实现
C++常用库函数atoi,itoa,strcpy,strcmp的实现 C语言字符串操作函数 1. 字符串反转 - strRev2. 字符串复制 - strcpy3. 字符串转化为整数 - atoi4. ...
- atoi&itoa
char* itoa(int num,char*str,int radix) {/*索引表*/ char index[]="0123456789ABCDEFGHIJKLMNOPQRSTUVW ...
- [经典] atoi && itoa
atoi原型:int atoi(const char *nptr) atoi,需要考虑的内容: 1. 第一个字符为"-"时为负,系数为-1:为"+"时为正,系数 ...
- 访谈将源代码的函数 strcpy/memcpy/atoi/kmp/quicksort
一.社论 继上一次发表了一片关于參加秋招的学弟学妹们怎样准备找工作的博客之后,反响非常大.顾在此整理一下,以便大家复习.好多源自july的这篇博客,也有非常多是我自己整理的.希望大家可以一遍一遍的写. ...
- 面试必会函数源代码 strcpy/memcpy/atoi/kmp/quicksort
http://blog.csdn.net/liuqiyao_01/article/details/26967813 二.stl模板函数 1.strcpy char * strcpy( char *st ...
- 转:C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文
转自:C语言字符串操作函数 - strcpy.strcmp.strcat.反转.回文 C++常用库函数atoi,itoa,strcpy,strcmp的实现 作者:jcsu C语言字符串操作函数 1. ...
- 疫情下的在线上课方案:QQ直播+蓝墨云班课
目录 疫情下的在线上课方案:QQ群视频(腾讯课堂)+蓝墨云班课 使用QQ进行直播 材料 QQ直播步骤 其他问题 使用蓝墨云班课加强学习效果 教材问题 我的直播-小学生硬笔书法基础 我的直播 - C程序 ...
- c/c++ 数字转成字符串, 字符串转成数字
c/c++ 数字转成字符串, 字符串转成数字 ------转帖 数字转字符串: 用C++的streanstream: #include <sstream> #Include <str ...
- boost::lexical_cast
boost::lexical_cast为数值之间的转换(conversion)提供了一揽子方案,比如:将一个字符串"转换成整数123,代码如下: "; int a = lexica ...
随机推荐
- java单例类/
java单例类 一个类只能创建一个实例,那么这个类就是一个单例类 可以重写toString方法 输出想要输出的内容 可以重写equcal来比较想要比较的内容是否相等 对于final修饰的成员变量 一 ...
- Spring aop 记录操作日志 Aspect
前几天做系统日志记录的功能,一个操作调一次记录方法,每次还得去收集参数等等,太尼玛烦了.在程序员的世界里,当你的一个功能重复出现多次,就应该想想肯定有更简单的实现方法.于是果断搜索各种资料,终于搞定了 ...
- 关键字volatile
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了.精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存 ...
- centos6.5安装lnmp环境
1.安装nignx的源,默认cenots6没有的. rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-cent ...
- 使用Kylin构建企业大数据分析平台的4种部署方式
本篇博客重点介绍如何使用Kylin来构建大数据分析平台.根据官网介绍,其实部署Kylin非常简单,称为非侵入式安装,也就是不需要去修改已有的 Hadoop大数据平台.你只需要根据的环境下载适合的Kyl ...
- 对于Python中RawString的理解
总结 1.'''作用: 可以表示 "多行注释" ."多行字符串" ."其内的单双引号不转义" 2.r 代表的意思是: raw 3.r 只对其 ...
- shell-参数做下标
test.sh #!/bin/bash#用第3个参数作为下标或position,来获取参数param=$(eval echo \$$3)echo "hello, $param"
- Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) C. Ray Tracing
我不告诉你这个链接是什么 分析:模拟可以过,但是好烦啊..不会写.还有一个扩展欧几里得的方法,见下: 假设光线没有反射,而是对应的感应器镜面对称了一下的话 左下角红色的地方是原始的的方格,剩下的三个格 ...
- ubuntu 下非交互式执行远程shell命令
apt-get install sshpass sshpass -p **your_password** ssh -o StrictHostKeyChecking=no "root@$ip& ...
- 用orb-slam2跑RGB-D Example中的TUM Dataset
链接在此:https://github.com/raulmur/ORB_SLAM2 1.按照要求下载数据集,我下载的是rgbd_dataset_freiburg2_pioneer_360,将其解压到你 ...