Jac*_*ack 10 c type-conversion
成功时,该函数将转换后的整数作为long int值返回.如果无法执行有效转换,则返回零值.如果正确的值超出可表示值的范围,则返回LONG_MAX或LONG_MIN,并将全局变量errno设置为ERANGE.
想想strtol(str, (char**)NULL, 10);如果str是 "0\0"如何知道函数失败或仅已转换与串"0"号?
Dan*_*her 12
如果要进行错误检查,则需要传递一个真实的指针地址,这样就可以区分"0"由0引起的0值和类似值"pqr":
char *endptr;
errno = 0;
long result = strtol(str, &endptr, 10);
if (endptr == str)
{
// nothing parsed from the string, handle errors or exit
}
if ((result == LONG_MAX || result == LONG_MIN) && errno == ERANGE)
{
// out of range, handle or exit
}
// all went fine, go on
Run Code Online (Sandbox Code Playgroud)
恕我直言,我更喜欢sscanf()或atoi()。strtol()主要原因是您无法可靠地检查某些平台(即Windows)上的错误状态,除非您使用sscanf()(如果成功则返回1,0如果失败则返回)。
由于接受的答案实际上并不是检查失败的正确方法。
您不应通过检查 strtol 的返回值来检查错误,因为该字符串可能是 0l、LONG_MAX 或 LONG_MIN 的有效表示。相反,检查 tailptr 是否指向您期望的数字后(例如,如果字符串应在数字后结束,则为 '\0')。您还需要在调用之前清除 errno 并在调用之后检查它,以防出现溢出。
| 归档时间: |
|
| 查看次数: |
9725 次 |
| 最近记录: |