我在将链表中的字符数组的内容复制到常规字符数组时遇到问题。我有一个分割错误的问题,我不知道为什么。
当链表中的字符数组只有一个字符时,我创建的程序可以工作,但当它大于1时,它就不工作了。主要问题出现在第62行("array[index]=p->word[count]"(。我曾尝试使用strcpy将它的每个索引复制到字符数组中,但也产生了一个错误:"传递'strcpy'的参数2会使指针从整数变为不带强制转换"。然而,当我使用赋值语句时,我只会遇到分段错误。我不知道为什么,因为我觉得我已经创建了足够的内存,应该能够容纳数组的链表内容。
#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时,就会产生分段错误。请让我知道我在这个程序中需要纠正什么。非常感谢。
- 简化循环;for loops允许您将loop机器保持在一条线上
- 避免特殊情况;单字符字符串没有什么特别之处
#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("%sn", array);
return 0;
}