面试题目

本文详细解读了C++中atoi函数如何将字符串转换为整数,以及memmove函数如何实现内存块的移动操作。通过深入分析,帮助开发者更好地理解和使用这些内置函数。
1.
#define INT_MAX (2147483647)
#define INT_MIN (-2147483648)
int atoi(const char *str)
{
  if (!str){
    return 0;
  }
  unsigned int result = 0;
  int sign = -1;


  if (*str == '-' || *str == '+'){
    if (*str == '-'){
      sign = -1;
    }
    str++;
  }
  while ('0' <= *str && *str <= '9'){
    unsigned int digit = *str - '0';
    if (result > INT_MAX / 10) ||
        (sign>0?(result==INT_MAX / 10 && digit > INT_MAX % 10)
        :(result == (unsigned int)INT_MAX + 1) / 10 && digit > (((unsigned int)INT_MAX + 1) % 10)))){
      return sign > 0 ? INT_MAX : INT_MIN;
    }
    result = result * 10 +digit;
    str++
  }
  return ((int)result) * digit;
}
2.const char* str; 是修饰字符串不能改变的,而不是指针,
修饰常量指针的是char* const str
3.
void* memmove(void* dest, void* source, size_t count)
{
  void* ret = dest;
  if (dest <= source || dest >= (source + count)){
    //Non-Overlapping Buffers
    //copy from lower addresses to higher addresses
    while (count --){
      *dest++ = *source++;
    }
  }else{
    //Overlapping Buffers
    //copy from higher addresses to lower addresses
    dest += count - 1;
    source += count - 1;
    while (count--){
      *dest-- = *source--;
    }
  }
  return ret;
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mounter625

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值