我需要strtol将一些数字从0转换到255,如果0也是我需要转换的数字,如何检查0的转换?
long conv = strtol(argv, &p, 10);
if (conv == 0)
{
perror("Conversion error");
exit(EXIT_FAILURE);
}
if ((conv >= LONG_MAX || conv <= LONG_MIN) && errno == 34);
{
perror("Invalid Range!");
exit(EXIT_FAILURE);
}发布于 2019-01-02 16:00:35
在调用strtol之前,将errno设置为0。
然后在调用之后,检查errno的值。如果是0,你知道呼叫是成功的。另外,您需要检查*p是否为0。如果是这样的话,这意味着整个字符串在没有额外字符的情况下被成功解析。
errno = 0;
long conv = strtol(argv, &p, 10);
if (errno)
{
perror("Conversion error");
exit(EXIT_FAILURE);
}
else if (*p)
{
perror("Not all characters converted");
exit(EXIT_FAILURE);
}手册页在“备注”部分中也提到了这一点:
由于strtol()可以在成功和失败时合法地返回0、LONG_MAX或LONG_MIN (strtol()的LLONG_MAX或LLONG_MIN ),因此调用程序应该在调用之前将errno设置为0,然后通过检查errno在调用后是否具有非零值来确定是否发生了错误。
https://stackoverflow.com/questions/54009387
复制相似问题