为什么string到int转换如果在第一个索引处不打印数字0

时间:2018-04-16 07:43:39

标签: c atoi strtol

我想知道为什么在使用atoi或strtol将字符串转换为int时,如果它是第一个索引则不会打印数字0,例如这个代码

char s[] = "0929784";
long temp = strtol(s, NULL, 10);
printf("%li", temp);

OUTPUT: 929784

有没有办法让0打印?

4 个答案:

答案 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);
相关问题