初学者的cstring麻烦

时间:2010-09-17 11:48:45

标签: c linked-list cstring

我正在尝试创建一个逐行读取文件的程序,然后将readed行放入一个链表,我的问题是将字符串添加到列表中。看看代码,在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 ;
   }
}

3 个答案:

答案 0 :(得分:1)

curr->ord = "some string" is wrong

而是你需要分配一个缓冲区并将字符串放在其中

e.g。

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

因为

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

仅分配包含'ord'指针的结构,但不是指向的结构。

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

        curr->next = head;
        head = curr;

看起来更像是名字应该是'prev'而不是'next'就像你做的那样(LIFO)

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

答案 1 :(得分:0)

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

你的malloc结构是不够的。这个malloc只创建struct memory(两个指针)的内存而不是内存中的内存。你必须使用适当大小的字符串来对你的char存储器(ord)进行malloc。使用strlen并为null添加一个以确定此字符串的大小。

答案 2 :(得分:0)

curr->ord = "some string"

是对的!