在给定的 C 程序中,strtol 的用法看起来像是利用了事实上,成功的字符串到长整型转换应该使第二个参数 (endptr) 等于 NULL 以确定错误。然而,显示的错误消息表明情况并非总是如此。
strtol 中错误检测的正确方法涉及几个步骤:
1。将 errno 设置为 0: 标准 C 库函数不会将 errno 设置为 0,因此在调用 strtol 之前手动执行此操作可确保遇到的任何错误都将反映在 errno 中。
2。检查转换结果:如果strtol返回0或LONG_MIN/LONG_MAX且errno设置为ERANGE,则表示转换错误或值超出范围。
3.区分错误类型: 在某些情况下,您可能需要区分特定的错误类型,例如尾随垃圾或无效的数字格式。这可以通过检查 endptr 的位置和 errno 中的错误值来实现。
这是 parseLong 函数的修订版本:
static long parseLong(const char *str) { char *temp; errno = 0; // Reset errno long val = strtol(str, &temp, 0); if (temp == str || *temp != '' || ((val == LONG_MIN || val == LONG_MAX) && errno == ERANGE)) { fprintf(stderr, "Could not convert '%s' to long and leftover string is: '%s'\n", str, temp); return 0; // Handle errors by returning a specific value like 0 } return val; }
如果出现错误,该函数返回 0,如果出现错误,则返回转换后的值成功。
此错误分析的关键要点是使用全面的错误处理方法,包括设置 errno、检查转换结果和区分错误类型。这确保了在进行字符串到数字转换时代码的健壮和可靠。
以上是使用C的`strtol`函数时如何正确处理错误?的详细内容。更多信息请关注PHP中文网其他相关文章!