我想知道为什么在使用atoi或strtol将字符串转换为int时,如果它是第一个索引则不会打印数字0,例如这个代码
char s[] = "0929784";
long temp = strtol(s, NULL, 10);
printf("%li", temp);
OUTPUT: 929784
有没有办法让0打印?
答案 0 :(得分:3)
使用
char s[] = "0929784";
size_t len = strlen(s);
long temp = strtol(s, NULL, 10);
printf("%0*li", (int) len, temp);
详情为here。
更精细,更安全的方法是:
char s[] = "0929784FooBarBlaBla";
char * endptr;
long temp = strtol(s, &endptr, 10);
printf("%0*li", (int) (endptr - s), temp);
更多详情请见here。
答案 1 :(得分:2)
printf
将尽可能以最佳方式打印long
,其中包括丢弃任何前导零。
例如,如果有人要求您写下您的年龄,如果您028
,您将不会写28
吗?在C中更加险恶,前导0表示八进制常量,因此实际上028
没有意义作为C中的数字。正式0
是八进制常量,尽管如此,当然,没关系。
答案 2 :(得分:1)
int基本上存储前导零。您遇到的问题是您没有打印那里的前导零。 (source)
pam_sss.so
手册:
0零'0'字符表示应使用零填充 而不是空白填充。如果两者都使用,则' - '会覆盖'0';
所以使用:
printf
答案 3 :(得分:0)
是。尝试
printf("%07li", temp);