2

strtol从给定的字符串中解析出一个长整数。好的。但是我怎么能检查是否有任何解析过的东西呢?

例如:

  • strtol在以下字符串上使用会产生0
    0abcdef
  • 但是,strtol在以下字符串上使用0也会产生:
    abcdef

因此,我没有指示该函数是解析有效0还是根本没有解析任何内容并因此返回0.

如何验证是否strtol工作正确或返回错误?有没有其他选择?

我读到在 Unix 上strtol设置了一个 errno,但我对 Win32 平台特别感兴趣。

4

2 回答 2

3

这是 strtol() 的签名:

long int strtol(const char *nptr, char **endptr, int base);

如果endptr不为 NULL,strtol()则将第一个无效字符的地址存储在*endptr. 因此,您可以简单地与之后进行比较*endptrnptr如果不同,strtol()则已经解析了之前的字符*endptr

于 2013-06-26T08:23:00.513 回答
1

使用 strtol 的第二个参数:它是一个char **. 它将被第一个无效字符填充:看看这个手​​册页

例子:

#include <stdlib.h>
int main()
{
    char       *ptr = 0;
    const char *str = "1234abcd";

    printf("%d\n", strtol(str, &ptr, 10)); // -> 0
    printf("ptr: %c\n", *ptr); // -> 'a'
    while (*str && *str != *ptr)
    {
        printf("parsed: %c\n",  *str); // -> '1' '2' '3' & '4'
        ++str;
    }
    return 0;
}
于 2013-06-26T08:20:31.803 回答