atoi和strtol函数均是把字符串转换成整数,两者的不同点主要是:

1,atoi的返回值无法区分是正常的返回还是错误的返回,如:

int val;
val = atoi("abc"); 与val = atoi("0");

两者返回的val均为0,因此无法区分哪个是正确parse后的值。

2,strtol函数对异常的返回可以设置errno,从而可以发现异常的返回,如:

errno = 0;/* To distinguish success/failure after call */
val = strtol(str, &endptr, base);/* Check for various possible errors */
if ((errno == ERANGE && (val == LONG_MAX || val == LONG_MIN))|| (errno != 0 && val == 0))
{perror("strtol");exit(EXIT_FAILURE);
}

3,strtol函数支持不同进制的转换,而atoi只支持十进制的转换。

函数原型说明:

#include <stdlib.h>
int atoi(const char *nptr);#include <stdlib.h>
long int strtol(const char *nptr, char **endptr, int base);

4,下面给出linux man strtol 的 demo 代码:

#include <stdlib.h>
#include <limits.h>
#include <stdio.h>
#include <errno.h>int main(int argc, char *argv[])
{int base;char *endptr, *str;long val;if (argc < 2){fprintf(stderr, "Usage: %s str [base]/n", argv[0]);exit(EXIT_FAILURE);}str = argv[1];base = (argc > 2) ? atoi(argv[2]) : 10;/* To distinguish success/failure after call */errno = 0;val = strtol(str, &endptr, base);/* Check for various possible errors */if ((errno == ERANGE && (val == LONG_MAX || val == LONG_MIN)) || (errno != 0 && val == 0)){perror("strtol");exit(EXIT_FAILURE);}if (endptr == str){fprintf(stderr, "No digits were found/n");exit(EXIT_FAILURE);}/* If we got here, strtol() successfully parsed a number */printf("strtol() returned %ld/n", val);/* Not necessarily an error... */if (*endptr != '/0')printf("Further characters after number: %s/n", endptr);exit(EXIT_SUCCESS);
}

linux c atoi strtol 区别相关推荐

  1. 你知道Linux和Unix的区别吗

    有很多初学Linux的人比较关心Linux和windows的区别,这里还有一点就是Linux Unix的区别,弄清楚一些区别有助于我们对操作系统的了解.这里叙述Linux Unix的区别. Linux ...

  2. linux与unix的区别_Linux与Unix

    linux与unix的区别 Linux与Unix. 两者之间有什么区别? (Linux vs Unix. What are the differences between the two?) If y ...

  3. Linux和Ubuntu的区别详解

    近有很多人问小编,Linux和Ubuntu的区别是什么,我们用户应该如何选择? 想知道Linux和Ubuntu的区别,首先我们要明白,什么是Linux,什么是Ubuntu. 下面就此问题,小编今天专门 ...

  4. linux桌面版和服务器版区别_简单普及一些linux和windows的区别,减少新入手一些云服务时的不适应...

    近一年,发的linux或者服务器之类的教程资源相对比较多,被问到一些令人头大的一些问题,也不知道怎么回答,可能需要稍微普及一点linux和windows的区别,虽然自己也是新人半桶水. 1.windo ...

  5. Mac 与 Linux Windows 常见使用区别

    Mac 与 Linux Windows 常见使用区别 1 常见命令 2 常见操作 3 常见问题 4 说明 本文记录一些mac和linux.windows之间常见的使用区别,以便于有需要的读者查阅,后续 ...

  6. Linux和其他操作系统的区别

    前言 这是我听老师讲课做的笔记,考试要看的. 这是视频地址 作者:RodmaChen 关注我的csdn博客,更多Linux笔记知识还在更新 为什么用Liunx系统 Linux和windows的区别 L ...

  7. linux与各操作系统的区别

    Linux和Windows的区别  和Linux一样,Windows系列是完全的多任务操作系统.它们支持同样的用户接口.网络和安全性.但是,Linux和Windows的真正区别在于,Linux事实上是 ...

  8. Unix、Linux、Windows操作系统的区别

    1.操作区别 linux区分大小写,windows在dos界面命令下不区分大小写: linux所有内容均以文件形式保存包括硬件,用户,而windows文件和硬件没什么关系,两个之间没有关联: wind ...

  9. TurboLinux入门教程:第六课Linux与其他操作系统的区别(转)

    TurboLinux入门教程:第六课Linux与其他操作系统的区别(转) 第六课 Linux 与其他操作系统的区别 目前运行在 PC 机上的操作系统主要有 Microsoft 的 MS-DOS . W ...

最新文章

  1. java如何生成唯一码_java – 如何为方法实例生成唯一的哈希码?
  2. 一文掌握常用的机器学习模型(文末福利)
  3. 50个关于IPython的使用技巧,get起来!
  4. ViewPager嵌套ViewPager 滑动冲突
  5. 二维有限元方程matlab,有限元法求解二维Poisson方程的MATLAB实现
  6. 1.计算机语言发展史
  7. 阿里云 ecs mysql搭建_使用ECS和mysql搭建mysql服务器-阿里云开发者社区
  8. [Linux]gocron定时任务平台的部署
  9. cesiumjs开发实践(七) 3D模型
  10. 基于matlab 的图像重建,基于Matlab的2D-FFT图像重建软件的设计
  11. Spring IOC容器的依赖注入流程(收集和注册、分析和组装)
  12. go java 垃圾回收_JAVA什么时候执行垃圾回收以及回收流程-Go语言中文社区
  13. python数据分析与发展常用哪些软件_常用数据分析软件比较
  14. 坦克世界怎么显示服务器准心,坦克世界8.0环境设置详细教程
  15. 1308:【例1.5】高精除
  16. CMD命令下修改和查看IP地址,DNS,网关
  17. win10切换输入法快捷键_常用win10快捷键有哪些
  18. Android 5.0 CardView 应用
  19. python 爬取某音乐各排行榜【简易版本】
  20. 使用wxParse解析富文本的总结以及解决苹果手机上视频无法播放的方法

热门文章

  1. Kubernetes — 调度系统
  2. PostgreSQL — 常规操作
  3. Go 语言编程 — 逻辑控制语句
  4. PyCharm+QT Designer整合
  5. jlink的SWD与JTAG下载模式的对应接线方法
  6. 视频直播软件开发过程中需要解决的“老朋友”...
  7. 2018-2019-1 20165201 《信息安全系统设计基础》第6周学习总结
  8. mvc中signalr实现一对一的聊天
  9. Windows打印体系结构之打印驱动框架
  10. 运维自动化之Cobbler安装配置