找回密码
 注册
查看: 965|回复: 4

求助:还请各位大哥帮我看看下面这个小问题,谢谢!

[复制链接]
发表于 2006-7-21 11:57:14 | 显示全部楼层 |阅读模式
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct stringdata
{
            char *string;
            struct stringdata *next;
} mydata;

void writel(mydata *start);

int main()
{
        mydata *start;
  start->string="starts";
  writel(start);
  return 1;
}


void writel(mydata *start)
{
        mydata *new;
        mydata *cur;
       
        char   input[100];
  
  cur=start;
  while(1)
  {
       fgets(input,sizeof(input),stdin);
       if (input=="9")
         {
             printf("write quit /n");
             break;
          }  
       else
         {         
            new=malloc(sizeof(mydata));
           //new=cur->next;
            cur->next=new;
            new->string=input;
           cur=new;
           free(new);
         }
  }  
}      

运行时:
当我在终端输入 9
可是执行的是:
else
         {         
            new=malloc(sizeof(mydata));
           //new=cur->next;
            cur->next=new;
            new->string=input;
           cur=new;
           free(new);
         }


为什么不执行
if (input=="9")
         {
             printf("write quit /n");
             break;
          }  


是不是 if (input=="9")  这个语句不行?

谢谢1
发表于 2006-7-21 12:52:12 | 显示全部楼层
大哥,你先学学C语言再来发帖吧,怕了你了。
比较两个字符串是否相等是看他们的首地址是否相等吗?
回复

使用道具 举报

 楼主| 发表于 2006-7-21 14:02:21 | 显示全部楼层
谢谢 大哥:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct stringdata
{
            char *string;
            struct stringdata *next;
} mydata;

void writel(mydata *start);

int main()
{
        mydata *start;
  start->string="starts";
  writel(start);
  return 1;
}


void writel(mydata *start)
{
        mydata *new;
        mydata *cur;
       
        char   input[100];
  
  cur=start;
  while(1)
  {
          fgets(input,sizeof(input),stdin);
          if (strcmp(input,"9"))
                   {
                            printf("write quit /n");
                     break;
                    }  
          else
                   {         
         new=malloc(sizeof(mydata));
         //new=cur->next;
         cur->next=new;
         new->string=input;
         cur=new;
         free(new);
       }
  }  
}   


编译没有错误,可是不管是敲入 9 还是别的,
都是提示:
段错误


大哥,我这又是错误在哪里呢?

谢谢!
回复

使用道具 举报

发表于 2006-7-24 00:14:12 | 显示全部楼层
唉,内存都不都分配,肯定出错了…………认真学学基础
回复

使用道具 举报

发表于 2006-7-29 09:27:52 | 显示全部楼层
new->string = input;这样是不行的
试着用下面的语句替换之:
new->string = new char[100];//释放时用delete []new->string;
if(new->string )
     strcpy (new->string ,input );

楼主应该把堆和栈的关系搞搞清楚先;
回复

使用道具 举报

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

本版积分规则

GMT+8, 2025-2-6 22:19 , Processed in 0.028870 second(s), 15 queries .

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5.

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