Strtol 函数返回错误值

Strtol function returning wrong value

我需要获取信用卡号作为练习的输入,所以我正在使用函数 fgets(将其作为字符串获取以检查它是否真的是一个数字),然后使用 strtol 来创建它一个长整数。但是函数的整数值 return 与字符串中的整数值不匹配。

while (*endptr != '\n') {
        char card_number_string[20];
        char *endptr;
        long int card_number;

        printf("Number: ");
        fgets(card_number_string, 20, stdin);
        card_number = strtol(card_number_string, &endptr, 10);
        printf("Result: %ld", card_number);
    }

例如,当我输入值 4003600000000014 时,printf 中显示的 strtol 的输出是 2147483647。

我的代码有问题吗?或者函数做 return 像这样不同的事情??

注意:所有变量都在主函数之上声明,它们在那里只是为了知道它们是如何声明的

值超出 long 范围。 2147483647 是您的 long 的最大值。

使用long long。 (或者 unsigned long long 如果不需要否定 CC#)

    //long int card_number;
    long long card_number;

    printf("Number: ");
    fgets(card_number_string, 20, stdin);
    
    //card_number = strtol(card_number_string, &endptr, 10);
    card_number = strtoll(card_number_string, &endptr, 10);

    //printf("Result: %ld", card_number);
    printf("Result: %lld", card_number);

注意:char *endptr; 隐藏 while (*endptr != '\n')

中的 endptr