Как скопировать символы из связанного списка в массив в C? - PullRequest
0 голосов
/ 03 ноября 2019

У меня проблема с копированием содержимого массива символов в связанном списке в обычный массив символов. У меня проблема с ошибкой сегментации, из-за которой я не уверен, почему.

Созданная мной программа работает, когда массив символов в связанном списке содержит только один символ, но не работает, когда он большечем 1. Основная проблема возникает в строке 62 («array [index] = p -> word [count]»). Я попытался с помощью strcpy скопировать каждый его индекс в массив символов, но это также привело к ошибке, которая гласит: «передача аргумента 2 в« strcpy »делает указатель из целого числа без приведения». Однако, когда я использую оператор присваивания, я просто получаю ошибку сегментации. Я не уверен, почему, потому что я чувствую, что создал достаточно памяти, чтобы иметь возможность хранить содержимое связанного списка для массива.

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

typedef struct node
{
    char word[100];
    struct node *next;
} ListNode;

int main ()
{
    ListNode * head = NULL;
    ListNode * tail = NULL;

    for (int count = 0; count < 5; count++)
    {
        ListNode * temp = malloc (sizeof (*temp));

        strcpy(temp -> word, "Hi");
        temp -> next = NULL;

        if (tail == NULL)
        {
            head = temp;
            tail = temp;
        }
        else
        {
            tail->next = temp;
            tail = temp;
        }
    }

    char array[999]; // array that will hold the characters in the linked list

    ListNode * p = head; //position of the current node
    int count;
    int index = 0;


    // while p is still a node in the list
    while(p != NULL)
    {
        if((int) strlen(p -> word) > 1) // checks if the string is longer than one character
        {
          count = 0; // initializes count as 0

          while(count < (int) strlen(p -> word)) // counts how many characters are in the string
          {
            array[index] = p -> word[count]; // assings the words into charater array
            count++; // increments the count
            index++; // changes the index
          }
        }
        else
        {
          array[index] = p -> word[0]; // copies p-word to array
          index++; // changes the index in the array
          p = p -> next;
       }
    }

    return 0;
}

Как упоминалось ранее, программа работает всякий раз, когда массив символов в связанном списке равен только 1, но возникает ошибка сегментации, когда число больше 1. Пожалуйста, дайте мне знать, что мне нужноисправить в этой программе. Спасибо.

1 Ответ

0 голосов
/ 03 ноября 2019
  • упростит ваши циклы;петли for позволяют удерживать петлевые машины на одной линии
  • избегать особых случаев;нет ничего особенного в строке из одного символа

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

typedef struct node
{
  char word[100];
  struct node *next;
} ListNode;

int main ()
{
  ListNode * head = NULL;
  ListNode * tail = NULL;
  ListNode * p ;
  int count;
  int index ;
  char array[999]; // array that will hold the characters in the linked list

  for (count = 0; count < 5; count++)
  {
    ListNode * temp = malloc (sizeof *temp);

    strcpy(temp->word, "Hi");
    temp->next = NULL;

    if (!tail) { head = temp; tail = temp; }
    else { tail->next = temp; tail = temp; }
  }

  count=0;
  for(p=head;p; p=p->next) { // walk the linked list

      for(index=0;  p->word[index]; index++) { // walk the string
        array[count++] = p->word[index];
      }

    }
  array[count++] = 0; // terminate

  printf("%s\n", array);
  return 0;
}
...