【发布时间】:2014-08-10 21:16:52
【问题描述】:
基本上使用 strtol 来检查不成功的转换, 我正在使用该功能
width = (int) strtol(argv[2], NULL, 10);
if (errno != 0) {
printf("Please parse integer argument");
}
使用errno.h
当参数是字符时有效,即:argv[2] = e, 6, etic 但是,当提供 444r 或 33f(前导数字后跟字符)等参数时,这无法捕获错误?有什么我遗漏的吗?
【问题讨论】:
-
阅读文档! (提示:第二个参数是什么,你传递
NULL是为了什么?) -
此外,如果您在检查之前强制转换为
int,您将无法捕获诸如(例如,对于具有 32 位int和 64 位long的平台)输入 4294967296 之类的错误。 -
另外,您应该在调用 strtol() 之前清除 errno。 strtol()函数成功后不会改变errno的设置。
-
这也有很好的信息:stackoverflow.com/a/3792676/103167
-
@Dipstick:这句话出自哪里?
strtol可能会在成功时更改errno。