繁体   English   中英

Strtol function 返回错误值

[英]Strtol function returning wrong value

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

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 的 output 为 2147483647。

这是我的代码中的错误吗? 或者 function 确实返回不同的东西?

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

值超出long范围。 2147483647 是long在您的情况下的最大值。

使用long long (如果不需要负 CC#,则为unsigned long long

    //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 while (*endptr != '\n')中隐藏 endptr

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM