【问题标题】:Transfer char arrays into linked list将 char 数组转入链表
【发布时间】:2014-06-29 04:59:32
【问题描述】:

我一直犹豫是否要发布有关此问题的问题,因为我担心会问一个愚蠢的问题,但是这里是:

我目前正在尝试创建一个程序,该程序将获取整个字符串,将它们放入 char 数组并将这些 char 数组传输到链表。我已经完成了将数组实际放入链表的所有工作。

我最初尝试使用数组本身创建每个节点,这只是给了我数组的第一个元素。然后我发现我需要使用strcpy()。

我不确定此时出了什么问题,但我认为这取决于内存分配,因为它给了我一个段错误。然而,这令人困惑,因为 rach 节点的内存分配已经处理完毕。

感谢您的帮助,这部分已经让我发疯了几个小时。

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

#define SIZE 100

struct node {
   char info;
   struct node *link;
} *start;

void create(char[]);
void display();
void insert_end(char[]);

int main() {

   int i;
   start=NULL;
   char data[SIZE];

   printf("Please enter a word: ");
   fgets(data, SIZE, stdin);
   create(data);

   for(i=0; i<5; i++)
   {
      printf("Please enter a word: ");
      fgets(data, SIZE, stdin);
      insert_end(data);
   }

   display();

   return 0;
}

void create(char data[])
{
   struct node *temp;
   temp = (struct node *)malloc(sizeof(struct node));

   if (start == NULL)
   {
      strcpy(temp->info,data);
      temp->link=NULL;
      start=temp;
   }
}

void display()
{
   struct node *ptr;
   ptr = start;

   while (ptr!=NULL)
   {
      printf("%c", ptr->info);
      ptr=ptr->link;
   }
}

void insert_end(char data[])
{
   struct node *ptr, *tempnode;
   ptr = start;

   while(1)
   {
      if(ptr->link != NULL)
      {
         ptr=ptr->link;
      }
      else
         break;

   }
   tempnode=(struct node *)malloc(sizeof(struct node));
   strcpy(tempnode->info,data);
   tempnode->link=NULL;
   ptr->link=tempnode;
}

【问题讨论】:

    标签: c linked-list strcpy arrays


    【解决方案1】:

    正如您所说,您使用的是数组,需要在链表结构的info 成员中保留空间。 char 类型只能容纳一个字符。

    struct node {
       char info[SIZE];
       struct node *link;
    } *start;
    

    如果 info 是一个数组,printf 需要%s 格式修饰符。

      printf("%s\n", ptr->info);
    

    【讨论】:

    • second param has to be less one of the size of the buffer:理解错了。
    • 更正了第二个参数,谢谢。 @Startncr 如果它解决了您的问题,您应该接受答案。
    【解决方案2】:

    info 是一个字符而不是字符 *。 用 -W -Wall 编译,你会看到大部分错误。

    【讨论】:

    • 编译时没有想到-W -Wall,谢谢。
    猜你喜欢
    • 1970-01-01
    • 2011-06-08
    • 1970-01-01
    • 2013-06-06
    • 2016-03-10
    • 2020-08-26
    • 2011-04-28
    • 2016-04-07
    • 2017-05-30
    相关资源
    最近更新 更多