弦乐&链接列表 - C编程

时间:2015-03-18 21:27:57

标签: c

我目前有代码:

struct node
{
    int data;
    struct node *next;
}*head,*var,*trav;

void insert_at_end(int value)
{
      struct node *temp; 
      temp=head;
      var=(struct node *)malloc(sizeof (struct node));
      var->data=value;
      if(head==NULL)
      {
          head=var;
          head->next=NULL;
      }
      else
      {
          while(temp->next!=NULL)
          {     
               temp=temp->next;
          }
          var->next=NULL;
          temp->next=var;
      }
}

void display()
{
     trav=head;
     if(trav==NULL)
     {
          printf("\nList is Empty");
     }
     else
     {
          printf("\nElements in the List: ");
          while(trav!=NULL)
          {
               printf(" -> %d ",trav->data);
               trav=trav->next;
          }
      printf("\n");
      }
}

int main(){

  int value;
  scanf("%d", &value);
  insert_at_end(value);
  display();
  return 0;
}

插入int时一切正常。但是,我想插入一个字符串。像“狗”这样的词。我改变了

int data to char data[255];

并将“%d”的所有实例更改为“%s”,但这不起作用。有没有人有任何想法?谢谢。

1 个答案:

答案 0 :(得分:1)

您需要进行以下更改:

  1. " int data"进入" char数据[255]"

  2. 将insert_at_end的参数更改为" char * value"

  3. 以下行而不是分配到insert_at_end:

    strncpy(var-> data,value,sizeof(var-> data));

    var-> data [sizeof(var-> data)-1] =' \ 0';

  4. 将%d更改为%s

  5. 将读取值的代码更改为以下内容:

    char值[255];

    fgets(value,sizeof(value),stdin);

    insert_at_end(值);

  6. 此代码不会删除fgets将读取的换行符。它留给读者如何去除额外的换行。它还作为练习向读者留下如何动态分配内存,以便可以支持可变长度的字符串(提示:使用malloc并记住释放它!)

    但是,要理解为什么需要进行这些更改并理解数组,字符串和指针在C中是如何工作的,我建议您阅读一本基本的C书。完整的解释并不适合这个有限的答案。我从你的问题中看出你没有理解C的一些基本原理,而且可能是这种情况C不一定是你现在使用的最佳语言。

    我还建议阅读一些基本的安全编码指南,以了解为什么' \ 0'在strncpy之后完成赋值,因为strncpy本身就是一个不安全的函数。