首先,很抱歉,如果我的问题已经得到解答。我发现了一些(在某种程度上)相似的线程,但我无法解决我的问题。 其次,我是 C 中单链表的新手,所以如果您能尽可能简单地回答我的问题,我将很高兴。
我做了一个简单的链表,里面有字符:
#include <stdio.h>
#include <stdlib.h>
// declaration of node
struct _Node_
{
char data_string;
struct _Node_ *next;
};
int main() {
//a simple linked list with 3 Nodes, Create Nodes
struct _Node_* head = NULL;
struct _Node_* second = NULL;
struct _Node_* third = NULL;
//allocate 3 Nodes in the heap
head = (struct _Node_*)malloc(sizeof(struct _Node_));
second = (struct _Node_*)malloc(sizeof(struct _Node_));
third = (struct _Node_*)malloc(sizeof(struct _Node_));
// assign data for head
head->data_string = 'H'; //assign value according struct
head->next = second; //points to the next node
// assign data for second
second->data_string = 'E';
second->next = third;
third->data_string = 'Y';
third->next = NULL;
return 0;
}
链表现在看起来像这样:
/* Linked list _Node_
head second third
| | |
| | |
+---+---+ +---+---+ +----+------+
| 1 | o-----> | 2| o-------> | 3 | NULL |
+---+---+ +---+---+ +----+------+
*/
假设我有 3 个数组,其中包含以下内容:
char name1[] = "Joe";
char name2[] = "Eve";
char name3[] = "Brad";
我的目标是将这个数组复制到每个数据字段中,因此结果如下所示:
/* Linked list _Node_
head second third
| | |
| | |
+-----+---+ +-------+---+ +-------+------+
| Joe | o-----> | Eve | o-----> | Brad | NULL |
+-----+---+ +-------+---+ +-------+------+
*/
我怎样才能做到这一点?我已经尝试添加/更改以下内容:
...
struct _Node_
{
char data_string[8];
struct _Node_ *next;
};
...
...
char name1[] = "Joe";
char name2[] = "Eve";
char name3[] = "Brad";
// assign data for head
head->data_string = name1; //assign value according struct
head->next = second; //points to the next node
// assign data for second
second->data_string = name2;
second->next = third;
third->data_string = name3;
third->next = NULL;
...
但是我编译后得到的是:
stack_overflow.c:27:23: error: array type 'char [8]' is not assignable
head->data_string = name1; //assign value according struct
~~~~~~~~~~~~~~~~~ ^
stack_overflow.c:31:25: error: array type 'char [8]' is not assignable
second->data_string = name2;
~~~~~~~~~~~~~~~~~~~ ^
stack_overflow.c:34:24: error: array type 'char [8]' is not assignable
third->data_string = name3;
~~~~~~~~~~~~~~~~~~ ^
3 errors generated.
也许有人可以提供帮助,我很感激任何帮助。 再次抱歉,如果这是重复的,但我无法通过其他线程解决此问题。
最佳答案
您要求提供代码示例:
struct Node
{
char *data_string;
struct Node *next;
};
struct Node *newNode (char *s)
{
struct Node *node;
if (!s) return 0; // error: no string
if (!(node= malloc(sizeof(struct Node)))) return 0; // no more memory
node->data_string= malloc(strlen(s)+1);
if (!node->data_string) {
free(node);
return 0;
}
strcpy(node->data_string,s);
node->next= 0;
return(node);
}
void freeNode(struct Node *node)
{
if (!node) return;
if (node->data_string) free(node->data_string);
free(node);
}
注意事项:
您为字符串 1 分配的内存大于长度,因为 C 中的字符串具有空终止字符。
不要在标识符名称前使用下划线 - 这些是为编译器保留的。
不要转换
malloc
的结果。它返回一个void
指针,它与任何指针类型兼容。此示例包括所有必需的错误检查。
关于在每个数据字段中复制一个数组到链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53813720/