要考虑的东西实在也挺多的。总结如下:

1 前面空格分隔符号的时候

2 第一个符号位处理+ -

3 遇到非数字字符退出

4 为正数的时候,大于INT_MAX上溢

5 为负数的时候, 小于INT_MIN下溢

6 为空字符串或者空指针的时候

1 int atoi(const char *str)

2 {

3 if (str == nullptr) return 0;

4 //注意:判断空字符串数组

5 if(*str == ‘\0‘) return 0;

6 long long llnum = 0;

7 int sign = 1;

8

9 while (*str == ‘ ‘)

10 {

11 str++;

12 }

13 if (*str == ‘-‘)

14 {

15 sign = -1;

16 str++;

17 }

18 //注意:不要溜了要判断+号的情况

19 else if(*str == ‘+‘)

20 {

21 str++;

22 }

23 while (*str >= ‘0‘ && *str <= ‘9‘)

24 {

25 int i = *str - ‘0‘;

26 llnum = llnum*10 + i;

27 if (llnum*sign > INT_MAX)

28 {

29 llnum = INT_MAX;

30 break;

31 }

32 else if (llnum*sign < INT_MIN)

33 {

34 llnum = INT_MIN;

35 break;

36 }

37 str++;

38 }

39 return int(sign*llnum);

40 }

头文件和INT_MAX和INT_MIN的含义用法。

一般情况下,C中int类型32位,范围是-2147483648到2147483647.

(1)最轻微的上溢是 INT_MAX + 1 :结果是 INT_MIN。

(2)最严重的上溢是 INT_MAX + INT_MAX :结果是 -2。

(3)最轻微的下溢是 INT_MIN - 1 :结果是 INT_MAX。

(4)最严重的下溢是 INT_MIN +INT_MIN :结果是 0。

应付溢出的最佳方法就是防范于未然:充分了解数据的范围,选择恰当的变量类型。

时间: 10-29

linux中atoi函数的实现 值得借鉴,atoi 函数实现相关推荐

  1. Linux 中 dlopen、dlsym、dlclose、dlerror函数

    编译时候要加入 -ldl (指定dl库) dlopen 基本定义 功能:打开一个动态链接库  [喝小酒的网摘]http://blog.const.net.cn/a/17154.htm 包含头文件:  ...

  2. linux中atoi函数的实现 值得借鉴,【转】atoi()函数的实现

    atoi()函数的功能:将字符串转换成整型数:atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负号才开始做转换,而再遇到非数字或字符串时('\0')才结束转化,并将结果返回( ...

  3. Linux中多线程使用信号量(信号灯),和sem_wait()函数使用

    文章目录 编程环境: 信号量(信号灯): 使用步骤: "生产者-消费者"例子: 理论模型: 代码分析: 代码实现: 运行结果: Mac 下对 sem_init()/sem_dest ...

  4. Linux中glob()、globfree()、getcwd()函数

    Linux中glob()与globfree()函数 文章目录 一.glob()函数 二.globfree()函数 三.getcwd()函数: 四.代码演示 总结 一.glob()函数 glob()函数 ...

  5. linux中副规则_Linux中的命名规范

    注意: 1.除了/(根目录)以外,所有的字符都合法 2.有些字符最好不用,如空格符.制表符.退格符和字符@#¥()- 等. 3.避免使用 ? 作为普通文件名的第一个字符. 4.大小写敏感. 变量命名规 ...

  6. linux中probe函数中传递的参数来源(上)

    点击打开链接 上一篇中,我们追踪了probe函数在何时调用,知道了满足什么条件会调用probe函数,但probe函数中传递的参数我们并不知道在何时定义,到底是谁定义的,反正不是我们在驱动中定义的(当然 ...

  7. linux中以A开头的函数使用方式历程及详解

    A开头的Linux C函数 abort 异常终止程序 abort函数在调用的时候,会触发SIGABRT信号 #include <stdlib.h> #include <signal. ...

  8. linux中ftok的作用,Unix/Linux编程之ftok函数用法

    linux 中ftok函数的用法 1.函数作用: 系统建立IPC通讯(如消息队列.共享内存时)必须指定一个ID值.通常情况下,该id值通过ftok函数得到 2.函数原型: #include #incl ...

  9. linux中signal函数返回值,signal函数、sigaction函数及信号集操作函数

    信号是与一定的进程相联系的.也就是说一个进程可以决定在进程中对哪些信号进行什 么样的处理.例如一个进程可以忽略某些信号而只处理其他一些信号另外一个进程还可以选择如何处理信号.总之这些总与特定的进程相联 ...

最新文章

  1. show processlist解析
  2. redhat安装pure-ftpd+mysql时出现libmysqlclient错误的解决办法
  3. 《Getting Real》读书笔记
  4. esp32 cam工作电流_我如何在家工作:Cam的生产力之痛
  5. python使用线程池多线程执行,并得到返回的结果
  6. 豆瓣再被约谈处罚150万!一年被罚20次,豆瓣到底怎么了?
  7. visio 如何画光学器件
  8. 百度个性化瓦片地图下载
  9. 算法笔记--最短路径之dijkstra算法
  10. 等保三级核心-数据安全
  11. 个人博客被恶意刷关键词的两次经历
  12. 在JavaScript中NaN为什么不等于NaN
  13. 测试小故事48:想当然
  14. 2021年全国职业院校技能大赛大数据应用技术国赛题
  15. 基于SSM实现汽车配件商城系统
  16. flash iphone效果
  17. Encoding History with Context-aware Representation Learning for Personalized Search(2020SIGIR)
  18. 豆瓣FM-wordpress
  19. 年度回忆录(2011.01----2011.07)
  20. 未来计划-2023.3.30

热门文章

  1. 小学计算机核心素养题,基于核心素养的小学信息技术教学
  2. 数学和中国文学的比较
  3. Angular项目实战:创建项目
  4. Android中Intent.setAction简单使用
  5. 服务器虚拟内存最佳设置范围,Windows2003服务器虚拟内存怎么设置最好?
  6. init 和 initialize 差距在哪里 oc
  7. java读文件块会读出null,为什么?
  8. 手机MT4平台怎么样?手机版MT4平台使用教程教学
  9. jQuery 字符串截取与数组截取
  10. selenium验证码登录_如何用 Python 登录主流网站,爬取一些需要的数据