1

我正在尝试制作一个程序,逐行读取文件,然后将读取的行放入链接列表中,我的问题是将字符串添加到列表中。查看代码,在 else 测试中可以看到我的问题。

#include<stdlib.h>
#include<stdio.h>

struct list_el {
    char *ord;
       struct list_el * next;
};

typedef struct list_el item;

int main(int argc, char *argv[]) {
    int c;
    item *curr, *head;
    head = NULL;
    FILE *fileHandle = fopen("tresmaa.txt", "r");

    while((c = fgetc(fileHandle)) != '\n' || c != EOF)
        if(c == EOF) {
            printf("\n");
            break;
        } else {
            curr = (item*)malloc(sizeof(item));
            curr->ord = "I cant point curr -< ord = c, how can i point the readed sentences to the value Ord?";
            curr->next = head;
            head = curr;
            putchar(c);
        }
    curr = head;

   while(curr) {
      printf("%s\n", curr->ord);
      curr = curr->next ;
   }
}
4

3 回答 3

1
curr->ord = "some string" is wrong

相反,您需要分配一个缓冲区并将字符串放入其中

例如

curr->ord = malloc( strlen(yourstring) + 1 );
strcpy(curr->ord, yourstring);

因为

curr = (item*)malloc(sizeof(item));

仅分配包含“ord”指针的结构,但不分配它指向的结构。

另一件看起来有点可疑的事情是

        curr->next = head;
        head = curr;

看起来更像是名称应该是“上一个”而不是“下一个”你这样做的方式(LIFO)

否则,如果你想要一个“正常”的 FIFO 链表只有一个头 ptr 和一个尾 ptr,然后使用尾 ptr 来追加元素,同时保持头指向第一个列表元素。

于 2010-09-17T12:25:23.123 回答
0

我在其他地方看到了你的问题。:)

您的结构 malloc 是不够的。这个 malloc 只创建结构内存(两个指针)的内存,而不是内部的内存。ord您还必须使用适当大小的字符串来分配您的字符内存 ( )。使用strlen并为 null 添加一个来确定此字符串的大小。

于 2010-09-17T11:56:23.947 回答
0
curr->ord = "some string"

是正确的!

于 2010-09-17T14:45:06.117 回答