请高手们帮看一个itoa的问题
#include<stdio.h>
void itoa(int a, char *s)
{
int count = 0;
int i = 0;
char tmp;
while(a > 0)
{
*s = a % 10 + '0';
a = a/10;
s++;
count++;
}
*s = '\0';
for(i = 0 ; i < count/2; i++)
{
tmp = s[i];
s[i] = s[count -1 - i];
s[count -1 - i] = tmp;
}
}
结果不对,后面的翻转好像没起作用,并且好像还有越界。而我*s换成s[i],如下代码。这样引用方式为什么输出结果就正常了呢?实在弄不明白,到底是引用不当的问题,还是什么问题?望高手解答。
#include<stdio.h>
void itoa(int a, char *s)
{
int count = 0;
int i = 0;
char tmp;
while(a > 0)
{
s[i] = a % 10 + '0';
a = a/10;
i++;
count++;
}
s[i] = '\0';
for(i = 0 ; i < count/2; i++)
{
tmp = s[i];
s[i] = s[count -1 - i];
s[count -1 - i] = tmp;
}
}
int main()
{
int n = 1234;
char m[10];
itoa(n,m);
printf("%s\n", m);
return 0;
}
[解决办法]
原因在于你的s++后跑到字符串的末尾了,需要修正回来:
void itoa(int a, char *str){int count = 0;int i = 0;char tmp;char*s = str;while(a > 0){*s = a % 10 + '0';a = a/10;s++;count++;}*s = '\0';s = str;for(i = 0 ; i < count/2; i++){tmp = s[i];s[i] = s[count -1 - i];s[count -1 - i] = tmp;}}