atoi和前导0表示十进制数

在CI中使用atoi ,我试图将char数组转换为int 。 我的号码虽然领先0 ,但是当我稍后打印这些号码时它们不会被保留。

 char num[] = "00905607"; int number; number = atoi(num); printf("%d", number); 

这个输出将是905607 ,我希望它是00905607

有任何想法吗?

请改用strtol 。 它允许您指定基础。

你可以在你的printf()上做填充,这样你就可以使用每个输出长度为8个字符

 printf("%08d", number); 

该代码工作正常,如果它可以工作。 整数是905607 …在数学意义上不存在前导零。

您的代码存在很多问题。 您正在声明您的字符串不正确,并且您没有打印转换后的数字。 另外,如果你正在做printf(number); 你需要使用格式字符串。 如果你想在其中有前导空格,可以使用宽度说明符。

不要使用atoi。 使用strtol,基数为10。

一般来说,没有理由在现代代码中使用atoi。

是的,当您想要显示整数时,您必须再次将它们格式化为字符串。 整数只是一个数字,它不包含有关如何显示它的任何信息。 幸运的是,printf函数已经包含了这个,所以就像这样

 printf( "%08d", num); 

大多数答案都假设您需要8位数,而这并不是您所要求的。

如果你想保留前导零的数量,你可能最好把它保存为字符串,并用strtol转换它来进行计算。

您可以使用sscanf,并提供’%d’作为格式字符串。

如果你不想要这种行为; 不要使用atoi。

也许sscanf具有%d格式?

您还可以计算字符串中的数字数量,并创建一个带有前导零的新数字。

或者查看printf的所有精彩格式标签,并使用一个用零填充。 例如,这里有很多: http : //www.cplusplus.com/reference/clibrary/cstdio/printf/