strtol
从给定的字符串中解析出一个长整数。好的。但是我怎么能检查是否有任何解析过的东西呢?
例如:
strtol
在以下字符串上使用会产生0
:
0abcdef
- 但是,
strtol
在以下字符串上使用0
也会产生:
abcdef
因此,我没有指示该函数是解析有效0
还是根本没有解析任何内容并因此返回0
.
如何验证是否strtol
工作正确或返回错误?有没有其他选择?
我读到在 Unix 上strtol
设置了一个 errno,但我对 Win32 平台特别感兴趣。
strtol
从给定的字符串中解析出一个长整数。好的。但是我怎么能检查是否有任何解析过的东西呢?
例如:
strtol
在以下字符串上使用会产生0
:0abcdef
strtol
在以下字符串上使用0
也会产生:abcdef
因此,我没有指示该函数是解析有效0
还是根本没有解析任何内容并因此返回0
.
如何验证是否strtol
工作正确或返回错误?有没有其他选择?
我读到在 Unix 上strtol
设置了一个 errno,但我对 Win32 平台特别感兴趣。
这是 strtol() 的签名:
long int strtol(const char *nptr, char **endptr, int base);
如果endptr
不为 NULL,strtol()
则将第一个无效字符的地址存储在*endptr
. 因此,您可以简单地与之后进行比较*endptr
,nptr
如果不同,strtol()
则已经解析了之前的字符*endptr
。
使用 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;
}