我将动态分配的字符串从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, , );???
}
答案 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