[英]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.