LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 625|回复: 5

两个让我郁闷的函数!!!请帮我!!!

[复制链接]
发表于 2005-5-29 13:06:08 | 显示全部楼层 |阅读模式

  1. #include "t.h"
  2. int StrAssing(HString *T,char *chars){ //由字符常量chars生成串T
  3.         int i,j;
  4. //        if(T->ch)
  5. //                free(T->ch);
  6.         i=strlen(chars);
  7.         if(!i){
  8.                 T->ch=NULL;
  9.                 T->length=0;
  10.         }
  11.         else{
  12.                 T->ch=(char *)malloc(i*sizeof(char));
  13.                 if(!T->ch)
  14.                         exit(1);
  15.                 T->length=i;
  16.                 for(j=0;j<i;j++)
  17.                         T->ch[j]=chars[j];
  18.                 }
  19.                 return 1;
  20. }


  21. int StrCopy(HString *T,HString S){ //由S复制生成串T
  22.         int i;
  23. //        if(T->ch)
  24. //                free(T->ch);
  25.         if(S.length=0){
  26.                 T->ch=NULL;
  27.                 T->length=0;
  28.         }
  29.         else{
  30.                 T->ch=(char *)malloc(S.length*sizeof(char));
  31.                 if(!T->ch)
  32.                         exit(1);
  33.                 for(i=0;i<S.length;i++)
  34.                         T->ch[i]=S.ch[i];
  35.                 T->length=S.length;
  36.         }
  37.         return 1;
  38. }
复制代码

1.为什么这两个函数把注释了的行添上去就出现段错误?
2.第二个函数不能达到copy的目的,主要原因在哪儿?
发表于 2005-5-29 13:31:03 | 显示全部楼层
关键是你传进去的参数 T 是否有问题:

1. T 是不是空指针(可以在函数中加上判断语句,if(NULL==T)...)
2. T 是不是野指针(即没有指向可用的地址范围)
3. T->ch 是不是野指针(2, 3 不能在函数中判断,调用函数的时候要小心)
回复 支持 反对

使用道具 举报

发表于 2005-5-29 13:53:46 | 显示全部楼层
好烂的代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-29 14:56:14 | 显示全部楼层
Post by doubleelec
关键是你传进去的参数 T 是否有问题:

1. T 是不是空指针(可以在函数中加上判断语句,if(NULL==T)...)
2. T 是不是野指针(即没有指向可用的地址范围)
3. T->ch 是不是野指针(2, 3 不能在函数中判断,调用函数的时候要小心)


调用的情况如下:
int i;
  char chars1[]="HelloWorld!";
  char chars2[]="computer";
  HString *S,*H;
  HString T;
  StrAssing(S,chars1);
  StrPrint(*S);
  StrAssing(H,chars2);
  i=StrLength(*H);
  printf("%d\n",i);
  StrCopy(&T,*H);
  StrPrint(T);
还请帮我看看!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-29 19:35:03 | 显示全部楼层
顶!帮帮我!
回复 支持 反对

使用道具 举报

发表于 2005-5-29 20:28:42 | 显示全部楼层
Post by caicheng
调用的情况如下:
int i;
  char chars1[]="HelloWorld!";
  char chars2[]="computer";
  HString *S,*H;
  HString T;
  StrAssing(S,chars1);
  StrPrint(*S);
  StrAssing(H,chars2);
  i=StrLength(*H);
  printf("%d\n",i);
  StrCopy(&T,*H);
  StrPrint(T);
还请帮我看看!


S被定义之后没有指向任何东西,怎么可以直接使用呢?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表