linux c atoi strtol 区别

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);
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值