注册 登录
编程论坛 C++教室

新人第一次问问题_一个不起眼的小程序_itoa

wangdenkun 发布于 2012-12-31 14:09, 1099 次点击
为什么我这样写:

#include <stdio.h>
#include <stdlib.h>
char ito(int);

int main()
{
    int l=2;
    char string[25];

    string[25]=ito(l);

    printf("%s\n",string);

    return 0;
}

char ito(int a)
{
    char string[25];

    itoa(a,string,2);

    return string[25];
}
然后就是这样的结果:
烫烫烫烫烫烫烫烫烫烫烫烫烫烫(还还有一个符号)

而这样写就可以:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int l=2;
    char string[25];

    itoa(l,string,2);

    printf("%s\n",string);

    return 0;
}
结果:
10

我是新人,求赐教!
16 回复
#2
wp2319572012-12-31 14:58
char string[25];  这个东东只是申请了一大片内存空间  但是并没有初始化  谁也不知道那里都写着啥

所以需要类似   char string[25]={'\0'};  一类的语句来进行初始化



#3
wp2319572012-12-31 15:02
char ito(int a)
{
    char string[25];

    itoa(a,string,2);

    return string[25];
}
这个函数写的不伦不类  实在是看不懂
#4
wangdenkun2012-12-31 18:23
回复 3楼 wp231957
我又不是做软件开发的 就是复习一下函数的知识。
#5
wangdenkun2012-12-31 18:28
的确 这样成功了:
#include <stdio.h>
#include <stdlib.h>
char ito(int);

int main()
{
    int l=2;
    char string[25]={'\0'};

    string[25]=ito(l);

    printf("%s\n",string);

    return 0;
}

char ito(int a)
{
    char string[25];

    itoa(a,string,2);

    return string[25];
}
我还是要问:不是已经string[25]=ito(l);了吗?非要初始化?
#6
wangdenkun2012-12-31 18:58
擦 又出毛病了 一片空白啊 貌似 string[25]=ito(l);不起作用啊 ,。。
暂且这样吧:
#include <stdio.h>
#include <stdlib.h>
char ito(int);

int main()
{
    int l=2;
    char string[25];

   // string[25]=ito(l);

    printf("%s\n",itoa(l,string,2));

    return 0;
}

char ito(int a)
{
    char string[25];

    itoa(a,string,2);

    return string[25];
}
#7
青春无限2012-12-31 22:03
看看
#8
wp2319572013-01-01 06:15
   return string[25];
大概楼主不晓得char string[25] 是虾米东东吧
这是一个能容纳25个char的数组

而这个char ito(int a)
函数返回的是一个字符而已

而且string[25] 还有越界的嫌疑  她的下标应该是0..24
#9
wangdenkun2013-01-01 09:39
回复 8楼 wp231957
我都知道 我想知道为什么printf出来的不是我想要的。
#10
liqingqinger2013-01-06 19:54
这个是程序起撒子实现了撒子功能?
#11
wangdenkun2013-01-08 16:30
回复 10楼 liqingqinger
就是练习一下 没什么功能
#12
allmy342013-01-18 09:25
string[25]?
下标能到25吗
#13
allmy342013-01-18 09:35
你的两个string[25]是不一样的啊,调用ito()处理的是局部的string,返回一个string[25]给main里面的string[25],但主函数的string没有初始化,当然是乱码了
#14
wangdenkun2013-01-18 12:25
回复 13楼 allmy34
学习了。。
#15
羽VS翼2013-01-18 15:05
你自定义的函数里面定义的数组是局部变量。不能直接传回。
你的函数返回后,数组会被直接销毁,建议你看一下堆与栈的区别。
#16
zhuanjia02013-01-18 20:56
char ito(int a)
{
 char string[25];

 itoa(a,string,2);

 return string[25];  //这边返回错了,应该返回数组首地址 return string;
                        //你返回string[25],就是把string[25]当成首地址,也就是说访问string[25]后面的地址,而你没对那些地址进行初始化,所以会出现乱码。
}
#17
wangdenkun2013-01-18 22:57
回复 15楼 羽VS翼
谢了。。
1