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
我需要获取信用卡号作为练习的输入,所以我正在使用函数 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