1

下面的代码给出的输出为 2147483647。如果if(atol(str)<=2147483647u) 更改为if(atol(str)<2147483647u),则输出为 100。输入保持与 相同str= "2147483649"

#include <stdio.h>
#include <ctype.h>

int main()
{
    unsigned long  l = 100;
    unsigned char str[19] = "2147483649";

    if(atol(str)<=2147483647u)
    {
        l = atol(str);
    }
    printf("\n%ld",l);

    return 0;
}
4

2 回答 2

1

INT_MAX = 2147483647

atol()返回一个长

对于大于 int max 2147483647 的数字

atoll()改为使用

#include <stdlib.h>

       int atoi(const char *nptr);
       long atol(const char *nptr);
       long long atoll(const char *nptr);
于 2013-05-27T10:46:10.167 回答
0

该函数atol()返回一个long int. 但是,当您的代码是if(atol(str) <= 2147483647u)两个数字时,都将被视为unsigned long int. 即(2147483649 > 2147483647),因此输出是100。当代码都是 if(atol(str) <= 2147483647)两者时long int,因此输出是因为 -2147483647的有符号长。2147483649-2147483647 < 2147483647

于 2013-05-27T10:48:43.000 回答