簡體   English   中英

如何在C的鏈表中存儲字符串類型的數據?

[英]How do you store string type data in a linked list in C?

因此,我試圖了解鏈接列表如何與存儲字符串類型的數據一起工作。 據我所知,鏈表使用一種數據結構以某種時尚的方式存儲數據,因此您可以輕松地在其中輸入新數據,刪除它們並根據需要重新排列它們。 我的問題是,我需要從用戶處獲取一個字符串,在鏈接列表中為其分配一個位置,然后移至列表中的下一個節點,然后再次執行相同的操作。 但是,在這一點上,我只是想從用戶那里獲取一個字符串,將其存儲在new_node值中(或對於您認為是指針而不是鏈接列表的人來說,則為(* new_node).value)並打印它出。 主體只要求用戶輸入字符串,add_to_list func接受輸入並將其添加到鏈接列表的開頭,而print func只是打印鏈接列表中的內容。 問題出在我的理解上(至少我認為是問題所在)是我為數據結構分配輸入值的地方,new_node-> value = * n應該使該值包含輸入字符串,如下所示:它只會給另一個數組* n包含的指針的值,不幸的是事實並非如此,我不確定為什么會這樣。 為了簡單起見,以下是代碼。

編輯:謝謝大家的回答,以及在將字符數組的值分配給另一個數組即字符串時為什么需要strcpy的解釋。

 #include <stdio.h> #include <stdlib.h> #define LARGE 10 struct node *add_to_list(struct node *list, char *n); struct node{ char value[LARGE+1]; struct node *next; }; struct node *first = NULL; void print(void); int main(void) { char job[LARGE],*p; printf("Please enter printing jobs\\n"); scanf ("%s", job); p=&job[0]; first = add_to_list(first, p); print(); return 0; } struct node *add_to_list(struct node *list, char *n) { struct node *new_node; new_node = malloc(sizeof(struct node)); if (new_node == NULL) { printf("Error: malloc failed in add_to_list\\n"); exit(EXIT_FAILURE); } new_node->value = *n; new_node->next = list; return new_node; } void print(void){ struct node *new_node; for(new_node=first;new_node!= NULL; new_node=new_node->next){ printf("%s\\n",new_node->value); } } 

使用strcpy而不是將char分配給無法編譯的數組。 數組不是左值,因此不能在不帶下標的情況下分配給數組,因此,左側僅帶有數組名稱的任何賦值都不會編譯。 更改

new_node->value = *n;

#include <string.h>

...

strcpy(new_node->value, n);
  1. 您不能將字符串分配為普通整數分配。

  2. 每當您要復制數組時,都必須使用memcpystrcpy類的庫函數。 在您的情況下,它的字符數組(即字符串)必須使用strcpy

  3. 用法char *strcpy(char *dest, const char *src);

因此在您的代碼中,它必須類似於strcpy(new_node->value,n); 而不是new_node->value=*n;

下面的鏈接中提到了使用strcpy原因

為什么使用strcpy函數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM