首页 > 解决方案 > Strtol 函数返回错误值

问题描述

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

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。

这是我的代码上的错误吗?或者该函数确实返回了类似这样的不同的东西?

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

标签: cstringstrtol

解决方案


值超出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;阴影endptrwhile (*endptr != '\n')


推荐阅读