验证scanf中的最大整数

Ant*_*lva 9 c scanf

我想从stdin读取一个int,但我想验证用户是否超过了int max值.我该怎么做?

int n;
scanf("%d", &n);
Run Code Online (Sandbox Code Playgroud)

scanf读取十进制输入并存储在int中,导致溢出.我该如何检查并避免这种情况?

AnT*_*AnT 13

将数字的字符串表示形式转换为实际值并监视溢出的唯一方法是使用strto..group中的函数.在您的情况下,您需要读取数字的字符串表示,然后使用strtol函数转换它.

请注意建议使用atoisscanf执行最终转换的响应.这些功能都不能防止溢出.


Mar*_*ett -1

将其读入字符串并检查长度,然后对字符串调用atol()or将其转换为 int。sscanf()

  • 不是“atoi”,也不是“sscanf”。这些都不能防止溢出。由于显而易见的原因,“检查长度”不能用于防止溢出。 (2认同)
  • `2000000000` 的长度为 10 位,可以毫无问题地放入 32 位 int 中。 (2认同)