标题:我这程序到底哪里写错了
只看楼主
xzy199999
Rank: 4
等 级:业余侠客
帖 子:326
专家分:286
注 册:2010-11-19
结帖率:92.45%
已结贴  问题点数:20 回复次数:14 
我这程序到底哪里写错了
char *convert(char *dest)
{
    char *head=dest;
    char *ss=dest;
    char *src={0};   
    while(*dest)
    {
        if(*dest!=':')
        {
            dest++;
        }
        else
        {
            head=dest;
            dest--;
            while((*dest != ':')&&(strcmp(dest,ss)!=0))
            {
                *src=*dest;
                src++;
                dest--;
            }
            dest=head;
            dest++;
        }
    }   
    return src;
}
int main()
{
    char *s="ab:cd";
    printf("%s\n",convert(s));
}
搜索更多相关主题的帖子: convert 
2012-08-24 00:40
遗矢的老人
Rank: 9Rank: 9Rank: 9
来 自:成都
等 级:蜘蛛侠
威 望:7
帖 子:325
专家分:1131
注 册:2012-7-20
得分:0 
char *src={0};   看这是啥意思?你准备实现什么功能啊? 就算成立里也在栈定义的数据怎么返回啊,就算是字符常量,写入肯定也是断错误啊!

[ 本帖最后由 遗矢的老人 于 2012-8-24 01:45 编辑 ]
2012-08-24 01:08
q215236213
Rank: 4
等 级:业余侠客
威 望:1
帖 子:148
专家分:276
注 册:2012-7-24
得分:0 
else
        {
            head=dest;
            dest--;  这里越界了吧
            while((*dest != ':')&&(strcmp(dest,ss)!=0))

char *src={0};    这个的意思等同于 char * src; src = NULL;
2012-08-24 15:12
xzy199999
Rank: 4
等 级:业余侠客
帖 子:326
专家分:286
注 册:2010-11-19
得分:0 
回复 2楼 遗矢的老人
你的意思是改为字符数组吗?

我是初学者
2012-08-24 17:34
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:0 
char *src={0};

按你这个写法你的src应该是malloc()分配 因为你返回了这个指针
2012-08-24 17:40
xzy199999
Rank: 4
等 级:业余侠客
帖 子:326
专家分:286
注 册:2010-11-19
得分:0 
回复 5楼 zklhp
加了malloc还是错误,到底应该怎么写啊

我是初学者
2012-08-26 23:05
xzy199999
Rank: 4
等 级:业余侠客
帖 子:326
专家分:286
注 册:2010-11-19
得分:0 
正确答案应该要打印ba:dc

我是初学者
2012-08-26 23:08
遗矢的老人
Rank: 9Rank: 9Rank: 9
来 自:成都
等 级:蜘蛛侠
威 望:7
帖 子:325
专家分:1131
注 册:2012-7-20
得分:0 
回复 4楼 xzy199999
static 修饰的数组可以
2012-08-27 01:13
遗矢的老人
Rank: 9Rank: 9Rank: 9
来 自:成都
等 级:蜘蛛侠
威 望:7
帖 子:325
专家分:1131
注 册:2012-7-20
得分:20 
回复 7楼 xzy199999
不会是的,本人分析,只有一次进入最里面的循环,找到b
 {
     char *head=dest;
     char *ss=dest;
     char *src={0}; 你可以这样的啊static char a[10] ;  char *src = a;最后返回a   
    while(*dest)   
     {
         if(*dest!=':')
         {
             dest++;
         }
         else
        {
             head=dest;第一次到这里时  head =dest ——>:
             dest--;    dest -->b
         while((*dest != ':')&&(strcmp(dest,ss)!=0))第一次满足条件,进入循环  第二次不满足:原因是dest和ss都指向a两个字符串相等strcmp 返回0 != 0假
             {                                                                          //退出循环这层循环,跑到这层while }后面执行!
                 *src=*dest; src-->b
                 src++; 指向下一位
                 dest--; dest -->a  再判断while循环
             }
             dest=head;  dest-->:
             dest++;    dest-->c  再判断外层while循环,然后一直判断,而c后面都没有“:”啦,不会出现dest在指向“:”, 所以dest不断指向后面,直到字符串结束,退出外层循环,所以scr
         }                       只采集到b字母,其实也没越界
     }   
    return src;
 }
 int main()
 {
     char *s="ab:cd";
     printf("%s\n",convert(s));
 }


[ 本帖最后由 遗矢的老人 于 2012-8-27 02:05 编辑 ]
2012-08-27 01:47
xzy199999
Rank: 4
等 级:业余侠客
帖 子:326
专家分:286
注 册:2010-11-19
得分:0 
回复 9楼 遗矢的老人
这么写我试了,虽然不崩溃了 但是却什么也不打印出来

我是初学者
2012-08-27 09:34



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-380022-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013225 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved