【发布时间】:2017-06-11 16:35:34
【问题描述】:
在 C 编程语言中,像 "2147483649" 这样的字符串会作为 int 溢出,因为最大的 unsigned int 是 2147483647。当我想将整数字符串转换为ints 时,我该如何检查这些溢出情况?
我不能只检查它是否是>=-(2^32-1) 和<= (2^32-1),因为将此字符串转换为int(例如atoi())的过程已经更改了此值。有没有一种简单的方法,而不是在转换之前检查字符串的位数以及一次检查每个数字以确保它在 ints 的范围内?
【问题讨论】:
-
为什么使用
atoi()?使用strtol()/strtoll()效果更好。 -
使用
strtol,atoi()没有错误检查。使用来自limits.h的LONG_MAX和LONG_MIN检查限制 -
这可能会对您有所帮助:stackoverflow.com/questions/7456902/…
-
如果您需要转换更大的值如何使用
atoll(如果您可以使用C99)?