2011-01-14 72 views
0

在C中使用atoi我试图将char数组数组转换为int。尽管我的电话号码上有我的号码0,但当我稍后打印此号码时,他们不会保留。atoi和前导0的十进制数

char num[] = "00905607"; 
int number; 

number = atoi(num); 

printf("%d", number); 

从这个输出将是905607,我想它是00905607

任何想法?

+2

首先,不,它不;无论前导零是什么,atoi都转换成小数点。其次,你打印出原始字符数组,而不是转换后的数字。 – meagar 2011-01-14 19:17:08

+1

你的编译器不能转换任何东西,尤其是不能转换成八进制。 – 2011-01-14 19:18:23

回答

0

你可以使用sscanf,并提供'%d'作为你的格式字符串。

5

您可以在自己的printf()做填充,所以如果你想每一个输出为8个字符,你会用

printf("%08d", number); 
0

如果你不想要那样的行为,不要使用atoi。

也许sscanf与%d格式?

3

如果代码正常工作,那么代码工作正常。整数是905607 ...在数学意义上不存在前导零。

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

1

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

printf("%08d", num); 
3

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

通常,没有理由在 现代代码中使用atoi。

1

大多数答案都假设你想要8位数字,但这并不完全符合你的要求。

如果你想保持前导零的数量,你可能更好的把它保存为一个字符串,并将其转换为strtol进行计算。