请高手们帮看一个itoa的有关问题

请高手们帮看一个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++后跑到字符串的末尾了,需要修正回来:
C/C++ code

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;
}

}