检查strtol转换失败

时间:2014-08-10 21:16:53

标签: c parsing

基本上使用strtol检查转换失败, 我正在使用函数

width = (int)  strtol(argv[2], NULL, 10);
if (errno != 0) {
    printf("Please parse integer argument");
}

使用errno.h

当参数是字符时,它起作用,即:argv [2] = e,6,etic 但是,当提供444r或33f(前导数字后跟字符)等参数时,这无法捕获错误?有什么我想念的吗?

2 个答案:

答案 0 :(得分:3)

您可以使用strtol()的第二个参数来接收指向数字后面第一个字符的指针,并检查该字符是否为NUL(即'\0')。

答案 1 :(得分:1)

您应该使用函数的第二个参数来确定解析停止的位置。根据C标准

  

7如果主题序列为空或者没有预期的形式,   没有进行转换; nptr的值存储在对象中   如果endptr不是空指针,则由endptr指向。

至于errno那么

  

如果正确的值超出可表示值的范围,   LONG_MIN,LONG_MAX,LLONG_MIN,LLONG_MAX,ULONG_MAX或ULLONG_MAX是   返回(根据返回类型和值的符号,如果有的话),   并且宏ERANGE的值存储在 errno

重要的是要注意,如果没有进行转换,则endptr wilol包含nptr的值。