我想用C语言创建一个链表,用户可以在其中输入字符串,这些字符串将作为节点存储在列表中。这是我的节点结构:
typdef struct NODE {
char word[50];
struct NODE* next;
} node;
从我的 main 方法中,我想提示用户输入字符串,然后调用将字符串添加到链表的方法(但不包含空格后的任何字符),并重复执行此操作,直到用户输入终止进程的特定字符串,所以在我的 main 方法中我有:
void main(){
node* fullList = NULL;
char stopString[5];
sprintf(stopString, "stop");
char string[50];
printf("Enter a word: ");
scanf("%[^ ]s", string);
while (strcmp(string, stopString) != 0) {
addToLinkedList(fullList, string);
printf("Enter a word: ");
scanf("%[^ ]s", string);
}
}
这是我的加法方法:
void addToLinkedList(node* list, char str[]) {
node* freeSpot;
node* newNode;
freeSpot = list;
if (list == NULL){
freeSpot = freeSpot->next;
}
newNode = (node *)malloc(sizeof(node));
newNode->word = str;
//strcpy(nweNode->next, str);
newNode->next = NULL;
freeSpot->next = newNode;
}
但是我收到一个错误:
"incompatible types when assigning to type âchar[256]â from type âchar *â"
如果我将"newNode->word = str;"替换为下面注释掉的代码段,我会得到:
warning: passing argument 1 of âstrcpyâ from incompatible pointer type [enabled by default]
/usr/include/string.h:128:14: note: expected âchar * __restrict__â but argument is of type
âstruct NODE *â
我在这一点上很困,我不确定如何成功实施这一点; 有什么建议吗?
此错误与注释行有关。注释掉后,您是否保存了文件?你清理过项目吗?无论如何,这句话:newNode->word = str;
也会引起麻烦。请改用 strcpy 键。您要复制字符串,而不是指针。
删除:
newNode->word = str;
并添加:
strcpy(nweNode->word, str);
您正在复制到当前节点的成员字,而不是复制到下一个节点。
在复制之前,您应该检查str
是否不超过 (50-1)。