关于串的堆分配存储

ML20 2003-02-06 11:32:18
//欲使用这个程序模拟串的堆分配存储。我希望这个程序运行后显示的是string,可是出错,
//我花了很长时间也没找到错在哪里,望网友们指点。
#include <stdio.h>
#include <stdlib.h>

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

int StrAssign(HString * T,char * chars);
int StrDisplay(HString S);

int main(){
HString s;
StrAssign(&s,"string");
StrDisplay(s);
return 0;
}

int StrAssign(HString * T,char * chars){
register int i,j;
char * c;

if(T->ch)free(T->ch);
for(i=0,c=chars;c;i++,c++);
if(!i){
T->ch=NULL;
T->length=0;
}else{
if(!(T->ch=(char *)malloc(sizeof(char)*i)))
return 0;
for(j=0;j<i;j++)
T->ch[j]=chars[j];
T->length=i;
}
return 1;
}

int StrDisplay(HString S){
register int i,len=S.length;

for(i=0;i<len;i++)
printf("%c",S.ch[i]);
return 1;
}
...全文
83 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
popy007 2003-05-10
  • 打赏
  • 举报
回复
for(i=0,c=chars;c;i++,c++);

改为
for(i=0,c=chars; *c ;i++,c++);


int main(){

HString s;

后加s.ch=NULL;


ZhangYv 2003-05-10
  • 打赏
  • 举报
回复
if(T->ch)free(T->ch); //T->ch在释放前没有被分配内存空间或指向NULL
for(i=0,c=chars;c;i++,c++); //i = strlen(chars)即可

for(i=0;i<len;i++) printf("%c",S.ch[i]); //直接printf("%s",S.ch)即可
ML20 2003-05-10
  • 打赏
  • 举报
回复
关注
rothy_liu 2003-02-09
  • 打赏
  • 举报
回复
在if(!(T->ch=(char *)malloc(sizeof(char)*i)))
前加一句i++
ML20 2003-02-09
  • 打赏
  • 举报
回复
strDisplay()还是有问题,显示一堆乱码.
rothy_liu 2003-02-07
  • 打赏
  • 举报
回复

int main(){
HString s;
之后加一句:
s.ch=NULL;
否则,
if(T->ch)free(T->ch);
...
if(!(T->ch=(char *)malloc(sizeof(char)*i)))
就会有问题

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧