c - 确定 *char < INT_MAX 是否

标签 c

我得到了这个代码:

char a[151];
scanf ("%150s", a);

a可能是一个数字,如果是这样,我需要确定是否 a < INT_MAX 。我不知道该怎么做,因为在 a 的每个索引中char 可以是一个数字,它意味着 150 位数字,如果我将值存储到某个 int 或其他任何值中,可能会导致溢出。有什么建议吗?

最佳答案

调用strtol()并测试errno

If the correct value is outside the range of representable values, LONG_MIN, LONG_MAX, ... the value of the macro ERANGE is stored in errno. C11dr §7.22.1.4 8

char a[151];
scanf ("%150s", a);
char *endptr;
errno = 0;
long num = strtol(a, &endptr, 10);
if (errno == ERANGE) Overflow();  // outside `long` range
if (num > INT_MAX) Overflow();    // greater than `INT_MAX`

关于c - 确定 *char < INT_MAX 是否,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33330067/

相关文章:

c++ - 用于检查数字是否在特定范围内的位旋转

c - 为什么控件放在 "else"部分?

c - 为什么 rand() 产生相差 3 或 4 的整数?

c - 如何声明函数返回类型 `int (*)[3]` ?

c - 如何在 C 中拆分字符串、存储在数组中并传递几个函数

c - 结构中硬件保留寄存器的占位符

c - GTK 应用程序在创建子进程时挂起

c - 带双引号的宏

c - C中的字符串解析。将字符串的一部分复制到另一个字符串

php - 无法在 C 中的 PHP_FUNCTION() 中调用另一个函数