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