首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-10-23 
请高手们帮看一个itoa的问题#includestdio.hvoid itoa(int a, char *s){int count 0int i 0char t

请高手们帮看一个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;}} 

热点排行