正确使用 strtol 进行错误处理
以下 C 或 C 程序将字符串转换为长整数,依赖于 strtol 返回的事实NULL 表示成功转换。但是,当给定值 55 时,它会失败并显示以下消息:
./convertToLong 55 Could not convert 55 to long and leftover string is: 55 as long is 55
本文探讨了如何正确检测 strtol 中的错误并解决给定程序中的问题。
strtol 中的错误处理
strtol(以及 strtoll 等相关函数)的官方规范指出即:
更正程序
在 C 中,可以通过设置来检测来自 strtol 的错误在调用该函数之前将 errno 设置为零。下面修改后的 parseLong 函数遵循以下方法:
static long parseLong(const char *str) { errno = 0; char *temp; long val = strtol(str, &temp, 0); if (temp == str || *temp != '<pre class="brush:php;toolbar:false">bool parseLong(const char *str, long *val) { char *temp; bool rc = true; errno = 0; *val = strtol(str, &temp, 0); if (temp == str || *temp != '' || ((*val == LONG_MIN || *val == LONG_MAX) && errno == ERANGE)) rc = false; return rc; }' || ((val == LONG_MIN || val == LONG_MAX) && errno == ERANGE)) fprintf(stderr, "Could not convert '%s' to long and leftover string is: '%s'\n", str, temp); // cerr << "Could not convert '" << str << "' to long and leftover string is '" // << temp << "'\n"; return val; }
在 C 中,更灵活的方法是返回成功/失败指示符,并提供一个单独的函数来提取转换后的值:
结论
通过这些修改,parseLong 函数可以正确处理来自 strtol 的错误,从而允许应用程序确定成功或转换失败并适当处理错误。
以上是在C和C中使用strtol时如何正确处理错误?的详细内容。更多信息请关注PHP中文网其他相关文章!