我想检查fgets
中的变量是否在C语言中溢出ling long int
。
我试过这个:
long long x;
fgets(...)
...
if(x <= LLONG_MAX && x >= LLONG_MIN)
但它不起作用,因为long long int
会收到过多的数字;它
回到LLONG_MIN
+过剩(我想是这样)。
答案 0 :(得分:3)
当您尝试将char *转换为long long时,请使用strtoll
。这些行来自strtoll文档(strtoll):
strtol()函数返回转换结果,除非该值会下溢或溢出。如果发生下溢,strtol()将返回LONG_MIN。如果发生溢出,strtol()将返回LONG_MAX。在这两种情况下,errno都设置为ERANGE。对于strtoll()(LLONG_MIN和LLONG_MAX而不是LONG_MIN和LONG_MAX)也是如此。