| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 413 人关注过本帖
标题:”堆分配存储表示串“的问题
只看楼主 加入收藏
巴克
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:93
专家分:199
注 册:2012-2-8
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
”堆分配存储表示串“的问题
先上代码。
程序代码:
#include<stdio.h>
#include<stdlib.h>
#define maxstrlen 255
typedef struct
{
    char *ch;
    int length;
}HString;


int StrAssign(HString T,char *chars)
{
    int i,k;
    char *c,*tem;
    c=chars;
    if(T.ch)free(T.ch);

    for(i=0;c;++i,++c)
        ;

    if(!i){T.ch = NULL;T.length=0;}
    else
    {
        if(!(T.ch = (char*)malloc(sizeof(char)*i)))
            exit(1);
        for(k=0;k<i;k++)
            T.ch[k]=chars[k];
        T.length = i;
    }

    return 1;
}

void StrPrint(HString T)
{
    int i;
    for(i=0;i<T.length;i++)
        printf("%c",T.ch[i]);
    printf("\n");
}
int main()
{
    HString T;
    char str[maxstrlen];
    gets(str);
    T.ch = NULL;
    StrAssign(T,str);
    StrPrint(T);
    return 0;
}


程序中主要是这段代码有问题
for(i=0;c;++i,++c)
        ;
本来想c指到字符串末尾的‘\0’会停止这个循环,但是却无法停止,各位高人看看哪里有问题??
搜索更多相关主题的帖子: 存储 
2012-07-14 15:55
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:5 
for(i=0;c;++i,++c)
        ;

这里c是什么数据类型?

授人以渔,不授人以鱼。
2012-07-14 16:35
liao06550107
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:111
专家分:696
注 册:2011-10-2
收藏
得分:15 
程序代码:
#include<stdio.h>
#include<stdlib.h>
#define maxstrlen 255

typedef struct
{
    char *ch;
    int length;
}HString;


int StrAssign(HString &T,char *chars) //引用传值
{
    int i,k;
    char *c;
    c=chars;
    if(T.ch)free(T.ch);

    for(i=0;*c;++i,++c); //c是指针,*c才是'\0'

    if(!i){T.ch = NULL;T.length=0;}
    else
    {
        if(!(T.ch = (char*)malloc(sizeof(char)*i)))
            exit(1);
        for(k=0;k<i;k++)
            T.ch[k]=chars[k];
        T.length = i;
    }

    return 1;
}

void StrPrint(HString &T) //引用传值
{
    int i;
    for(i=0;i<T.length;i++)
        printf("%c",T.ch[i]);
    printf("\n");
}
int main()
{
    HString T;
    char str[maxstrlen];
    gets(str);
    T.ch = NULL;
    StrAssign(T,str);
    StrPrint(T);
    return 0;
}

听不同的音乐,看不同的书,游历不同的城市,邂逅不同的人,走的多了,站的高了,自然就看的远了。
2012-07-14 16:52
爱闹的娃
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:265
专家分:975
注 册:2011-10-23
收藏
得分:0 
你应该是判断它的值........想想你的c是什么???还有就是你的函数写得不对.......
2012-07-14 16:57
巴克
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:93
专家分:199
注 册:2012-2-8
收藏
得分:0 
回复 3楼 liao06550107
你太有才了。
2012-07-14 17:34
巴克
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:93
专家分:199
注 册:2012-2-8
收藏
得分:0 
回复 3楼 liao06550107
不过你的代码无法通过编译。。但是你指出的错误是对的
2012-07-14 17:36
快速回复:”堆分配存储表示串“的问题
数据加载中...
 
   



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

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