【发布时间】:2022-12-08 22:10:41
【问题描述】:
根据手册页,fscanf 在出错时返回 EOF,但如果溢出是错误,我无处可寻。 我听说 strtol() 可能与这个过程密切相关,它所做的是消耗文件中的所有数字,然后在下溢时返回 LONG_MIN,或在溢出时返回 LONG_MAX,并将 errno 设置为 ERANGE。但问题是它将错误传递给 fscanf()。
我不想消耗无限数量的数字,我想 100% 确保 fscanf() 在溢出的情况下返回 EOF。
我怎么做? %10ld?
【问题讨论】:
-
“如果溢出是一个错误。” --> 对于
fscanf("%ld", ...或"%10ld",溢出是未定义行为(UB)。使用"%9ld"就没有溢出的可能,只有潜在的未读文本。 -
“它将错误传递给 fscanf()。” --> 没有。
-
“我想 100% 确保 fscanf() 在溢出的情况下返回 EOF” --> 没有 UB 是不可能的。
-
“我不想消耗无限多的数字,”--> 最多要消耗多少个数字?帖子有大约 4 个问题,也许可以清楚地确定最感兴趣的问题?标题问题的答案是:不可能。
标签: c