atoi和strtol的区别和使用
答案:3 悬赏:70 手机版
解决时间 2021-02-11 19:55
- 提问者网友:萌卜娃娃
- 2021-02-10 23:36
atoi和strtol的区别和使用
最佳答案
- 五星知识达人网友:玩世
- 2021-02-11 00:20
1. atoi的返回值无法区分是正常的返回还是错误的返回,如:
int val;
val = atoi("abc"); 与val = atoi("0");
两者返回的val均为0,因此无法区分哪个是正确parse后的值。
2. strtol函数对异常的返回可以设置errno,从而可以发现异常的返回,如:
errno = 0;
val = strtol(str, &endptr, base);
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);
int val;
val = atoi("abc"); 与val = atoi("0");
两者返回的val均为0,因此无法区分哪个是正确parse后的值。
2. strtol函数对异常的返回可以设置errno,从而可以发现异常的返回,如:
errno = 0;
val = strtol(str, &endptr, base);
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);
全部回答
- 1楼网友:话散在刀尖上
- 2021-02-11 02:34
1,atoi的返回值无法区分是正常的返回还是错误的返回,如:
int val;
val = atoi("abc"); 与val = atoi("0");
两者返回的val均为0,因此无法区分哪个是正确parse后的值。
2,strtol函数对异常的返回可以设置errno,从而可以发现异常的返回,如:
errno = 0;
val = strtol(str, &endptr, base);
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);
- 2楼网友:雪起风沙痕
- 2021-02-11 01:29
语法.数据类型的匹配问题. 和赋值语句l=r的规则一样,调用函数时实参类型也必须和形参兼容.strtol和atoi都是c标准库中的函数,你通过看它们的函数声明就能知道,形参类型都是指向字符串的指针(char*),而你传char,所以编译出错
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯