确定* char< INT_MAX

时间:2015-10-25 13:10:31

标签: c

我收到了这段代码:

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

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

2 个答案:

答案 0 :(得分:2)

致电strtol()并测试errno

  

如果正确的值超出了可表示值的范围LONG_MINLONG_MAX,......宏ERANGE的值存储在errno中。 C11dr§7.22.1.48

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`

答案 1 :(得分:0)

解决的一种方法:

1. INT_MAX = 2147483647 --> contains 10 digits  
2. len = strlen(a);  
3. if (len > 10)   
   a. true --> then a > INT_MAX --> print answer and return  
   b. false, go to step 4  
4. if (len < 10)  
   a. true --> then a < INT_MAX --> print answer and return  
   b. false, go to step 5  
5. (len == 10) case  
6. if (a[9]-'0' > 2) // 10th digit is > 2  
   a. true --> then a > INT_MAX --> print answer and return  
   b. false, go to step 7  
7. int num = atoi(a);  
9. Compare num and INT_MAX and print answer and return  

[注意:这里不考虑负数]

相关问题