基本上使用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(前导数字后跟字符)等参数时,这无法捕获错误?有什么我想念的吗?
答案 0 :(得分:3)
您可以使用strtol()
的第二个参数来接收指向数字后面第一个字符的指针,并检查该字符是否为NUL(即'\0'
)。
答案 1 :(得分:1)
您应该使用函数的第二个参数来确定解析停止的位置。根据C标准
7如果主题序列为空或者没有预期的形式, 没有进行转换; nptr的值存储在对象中 如果endptr不是空指针,则由endptr指向。
至于errno那么
如果正确的值超出可表示值的范围, LONG_MIN,LONG_MAX,LLONG_MIN,LLONG_MAX,ULONG_MAX或ULLONG_MAX是 返回(根据返回类型和值的符号,如果有的话), 并且宏ERANGE的值存储在 errno 。
中
重要的是要注意,如果没有进行转换,则endptr wilol包含nptr的值。