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

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

时间: 2024-10-11 11:49:51

c/c++面试题(8)memcopy/memmove/atoi/itoa的相关文章

转载 C++常用库函数atoi,itoa,strcpy,strcmp的实现

C++常用库函数atoi,itoa,strcpy,strcmp的实现 C语言字符串操作函数 1. 字符串反转 - strRev2. 字符串复制 - strcpy3. 字符串转化为整数 - atoi4. 字符串求长 - strlen5. 字符串连接 - strcat6. 字符串比较 - strcmp7. 计算字符串中的元音字符个数8. 判断一个字符串是否是回文1. 写一个函数实现字符串反转 版本1 - while版 void strRev(char *s){    char temp, *end 

AToI&amp;IToA

//AToI #include <stdio.h> #define SIZE 200 int data[SIZE] = {4,5,6,7}; int AToI(int N,int Base) { int ret = 0; for(int i=0;i<N;i++) { ret = ret * 10 + data[i]; } return ret; } int main(void) { int num = AToI(4,10); printf("%d",num); ret

atoi和itoa

itoa()函数的原型为: char *itoa( int value, char *string,int radix);itoa()函数有3个参数:第一个参数是要转换的数字,第二个参数是要写入转换结果的目标字符串,第三个参数是转换数字时所用的基数.在例中,转换基数为10.10:十进制:2:二进制...itoa并不是一个标准的C函数,它是Windows特有的,如果要写跨平台的程序,请用sprintf. 是Windows平台下扩展的,标准库中有sprintf,功能比这个更强,用法跟printf类似

华为机试—介绍、剖析、建议

一.华为机试介绍 1.大致介绍 时间:120分钟 环境:Visual Studio(去年是vs2005).Visual C++.VC 6.0.Eclipse(Java) 题量:共3题 初级题--60分--3组测试数据 中级题--100分--5组测试数据 高级题--160分--8组测试数据 注:初级题和中级题为必答题,高级题为附加题. 提交次数:每题最多5次 评判方式:按通过测试数据组数给分,每通过一组得20分 2.考试说明 这里有一个老版的机试考试说明,供大家参考: C/C++,JAVA机试流程

标准库常用包介绍

标准库 https://godoc.org/-/go builtin 包 常量 true,false,iota 函数 len cap close(c chan Type) delete(map,key) make new panic recover 类型 int8 ~ int64 uint8(byte) ~ uint64 uint int  uintptr float32 float64 rune bool error string strings 包 函数 Contains  Index Sp

boost::lexical_cast

boost::lexical_cast为数值之间的转换(conversion)提供了一揽子方案,比如:将一个字符串"123"转换成整数123,代码如下: string s = "123"; int a = lexical_cast<int>(s); 这种方法非常简单,笔者强烈建议大家忘掉std诸多的函数,直接使用boost:: lexical_cast.如果转换发生了意外,lexical_cast会抛出一个bad_lexical_cast异常,因此程序中

Boost入门

[转载网友转载的 不过不知道原作者地址] Boost入门向导 简介:boost是一套开源的.高度可移植的C++模板库.它由C++标准委员发起,且里面很多组件有望成为下一代的C++标准库,其地位将会与STL一样.boost库的英文站点是http://www.boost.org.如果上个页面不能访问,可以看http://boost.c-view.org,它是Boost镜像.boost按功能分为:字符串.容器.算法.迭代器.数据结构.内存管理.多线程.IO等.其中字符串组中的正规表达式可以与POSIX

字符串与其他基本类型的转换——从C到C++11

转自 IBM 编译器中国开发团队的<C++11中的string - atoi/itoa> 在C++11中,由于右值引用的引入,常为人所诟病std::string的性能问题得到了很大的改善.另外一方面,我们也可以看到新语言为std::string类增加了很多新的api.比较引人注意的就是std::string的成员函数stoi系列,以及std::to_string全局函数.这两种API虽然很不起眼,却为C++11的格式化输出(formatted I/O)增加了一种实用的手段.我们可以依序会议一下

程序猿的自我修养清单

Data Structures 1. Integer – find number of 1s – next largest smaller – smallest larger number – determine if is palindrom – itoa, atoi – add 2 numbers w/o using + or arithmetic operators – implement *, -, / using only + – find max of two numbers w/o