标题:堆串的基本运算
只看楼主
a76962934
Rank: 2
等 级:论坛游民
帖 子:39
专家分:53
注 册:2012-5-30
结帖率:75%
已结贴  问题点数:20 回复次数:1 
堆串的基本运算
#include <stdio.h>
#include <string.h>
#include <process.h>
#include <malloc.h>
typedef struct
{
    char *ch;
    int length;
}str;
void concat(str s,str s1)
{
    str T;
    int i,j;
    T.length=s.length+s1.length;
    if((T.ch=(char*)malloc((s.length+s1.length+1)*sizeof(char)))==NULL)
    {
        printf("error");
        exit(0);
    }
    for(i=0,j=0;i<T.length;i++,j++)
    {
        if(i>=8&&i<8+s1.length)
        {
            T.ch[i]=s1.ch[i-8];
            i++;
        }
        T.ch[i]=s.ch[j];
    }
    printf("%s",T.ch);
}
main()
{
    str s,s1;
    s.ch="abcdefghijklmn";
    s1.ch="xyz";
    s.length=strlen(s.ch);
    s1.length=strlen(s1.ch);
    if((s.ch=(char*)malloc((s.length+1)*sizeof(char)))==NULL)
    {
        printf("error");
        exit(0);
    }
    if((s1.ch=(char*)malloc((s1.length+1)*sizeof(char)))==NULL)
    {
        printf("error");
        exit(0);
    }
    printf("%s\n",s.ch);
    printf("%d\n",s.length);
    concat(s,s1);
}
为什么我用这个代码运行出来的字符串是乱码呢?    我把其中的malloc函数去掉 就正常了。。。为什么会这样呢。。想不通。 动态分配地址影响到哪了???
   

   
搜索更多相关主题的帖子: include void 
2013-04-25 00:06
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
得分:20 
    s.ch="abcdefghijklmn";
    s1.ch="xyz";

    if((s.ch=(char*)malloc((s.length+1)*sizeof(char)))==NULL)
    if((s1.ch=(char*)malloc((s1.length+1)*sizeof(char)))==NULL)
两个malloc改变了s.ch和s1.ch的指向,当然就是乱码了;s和s1本来已经赋值的,都申请结构体空间了,没有必要申请额外的堆内存吧。
    printf("s.ch=%p,s1.ch=%p\n",s.ch,s1.ch);
    if((s.ch=(char*)malloc((s.length+1)*sizeof(char)))==NULL)

    if((s1.ch=(char*)malloc((s1.length+1)*sizeof(char)))==NULL)

    printf("s.ch=%p,s1.ch=%p\n",s.ch,s1.ch);

你这样看看,前后地址肯定对不上了

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2013-04-25 06:24



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




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

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