使用 strtol 检测字符串到长整型转换中的错误
在 C 编程中,strtol 函数通常用于转换 a 的字符串表示形式长整数为其数值。然而,单独使用 strtol 可能并不总能提供足够的错误处理。
问题:
提供的代码演示了程序正确将字符串转换为长整数的场景,但也会打印一条错误消息,指出“尽管转换成功,但无法转换”。这是因为程序假设如果 strtol 成功转换字符串,则第二个参数(表示剩余字符串)应该为 NULL。但是,即使转换成功,某些条件也可能导致出现非 NULL 剩余字符串。
解决方案:
要准确检测 strtol 中的错误,请考虑以下改进:
修订的函数:
bool parseLong(const char *str, long *val) { char *temp; bool rc = true; errno = 0; *val = strtol(str, &temp, 0); if (temp == str || *temp != '<pre class="brush:php;toolbar:false">if (parseLong(str, &value)) // Conversion successful else // Handle error' || ((*val == LONG_MIN || *val == LONG_MAX) && errno == ERANGE)) rc = false; return rc; }
用法:
这个修改后的函数返回一个布尔值来指示转换是否成功或 不是。您可以按如下方式使用它:
附加说明:
以上是在 C 中使用 strtol 将字符串转换为长整数时如何可靠地检测错误?的详细内容。更多信息请关注PHP中文网其他相关文章!