Страшные проблемы для начинающих - PullRequest
1 голос
/ 17 сентября 2010

Я пытаюсь создать программу, которая читает строку за строкой, а затем помещает прочитанную строку в связанный список, моя проблема заключается в добавлении строки в список.Посмотрите на код, в тесте 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 ]

1 голос
/ 17 сентября 2010
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 для добавленияэлементы, сохраняя при этом указатель на первый элемент списка.

0 голосов
/ 17 сентября 2010
curr->ord = "some string"

верно!

0 голосов
/ 17 сентября 2010

Я вижу вашу проблему в другом.:)

Недостаточно вашего malloc структуры.Этот malloc создает только память структуры памяти (два указателя), а не память внутри.Вам также придется распределять память по символам (ord) с правильным размером строки.Используйте strlen и добавьте единицу для нуля, чтобы определить размер этой строки.

...