如何在链表中的节点中存储字符串?我正在使用Visual Studio。

时间:2017-04-22 05:39:32

标签: c

我将动态分配的字符串从main.c传递给函数addNode()作为指针*str

我想将此字符串添加到我创建的节点中的字段。

// Structure definitions
// Node in doubly-linked list

typedef struct DLN {
    struct DLN *prev;       // Pointer to previous list element
    struct DLN *next;       // Pointer to next list element
    char *word;
} DLNode;

// Actual doubly-linked list
typedef struct {
    DLNode *firstNode;  // Pointer to first node in list
    DLNode *lastNode;   // Pointer to last node in list
} DLList;

// Function prototypes

void addNode(DLList *list, char *str);  
void addNode(DLList *list, char *str) {

    DLNode *newNode;

    newNode = (DLNode*)malloc(sizeof(DLNode));

    if (newNode == NULL) {
        fprintf(stderr, "Error:Could not allocate new node\n");
        exit(0);
    }


    //list is empty, add one node 
    if ((list->firstNode == NULL) && (list->lastNode == NULL)) {
        list->firstNode = newNode;
        list->lastNode = newNode;
        newNode->next=NULL;
         newNode->prev=NULL;

          //(newNode->word)=*str;

         //strncpy(newNode->word, , );???
    }

2 个答案:

答案 0 :(得分:0)

如果你知道str是一个有效的C字符串,并且除了在节点内存管理中不会被释放,那么你可以做一个简单的任务:

newNode->word = str;

但如果{em>以以任何方式访问str而不是通过节点,则分配一个新字符串并将其指针存储在newNode->word中:

newNode->word = (char*)malloc(strlen(str)+ 1);

if (newNode->word == NULL) {
    fprintf(stderr, "Error:Could not allocate new string for node\n");
    exit(0);
}

strcpy(newNode->word, str); // newNode->word is large enough, so this is safe.

然后你可以在释放节点时释放字符串,以使事情更加整洁。

答案 1 :(得分:0)

使您的代码简单地将单词声明为DLNode中的字符数组。说char字[50]。

char word[50]; // in your DLNode structure 
memset(newNode->word, '\0', sizeof(newNode->word)); // In addNode code
strcpy(newNode->word, str); // In addNode code