1

ファイルを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」ポインターを含む構造体のみを割り当てますが、それが指すものは割り当てません

少し疑わしいと思われるもう1つのことは、

        curr->next = head;
        head = curr;

名前は「次」ではなく「前」にするべきだったようです(LIFO)

それ以外の場合は、「通常の」FIFO リンク リストに head ptr と end ptr だけが必要な場合は、end ptr を使用して要素を追加し、head が最初のリスト要素を指すようにします。

于 2010-09-17T12:25:23.123 に答える
0

あなたの問題は他にあります。:)

構造体の malloc が十分ではありません。この malloc は構造体メモリ (2 つのポインター) のメモリのみを作成し、内部のメモリは作成しません。ord文字列の適切なサイズでもchar メモリ ( ) を malloc する必要があります。strlenこの文字列のサイズを決定するには、null を使用して 1 つ追加します。

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

は正しい!

于 2010-09-17T14:45:06.117 に答える