【问题标题】:Why isn't my addToList method working right?为什么我的 addToList 方法不能正常工作?
【发布时间】:2013-05-21 01:12:26
【问题描述】:

我是新来的,这是我的第一个问题:

这是我的代码:

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

struct Person{
        char *vorname;
        char *nachname;
};
typedef struct Person Person;

struct Node{
        Person *data;
        struct Node *next;
};
typedef struct Node Node;
void addToList(Person *p);
void readFile();
Node *start = NULL;

void readFile(){
        FILE *f;
        Person *p;
        char input[501];
        char *line;
        f = fopen("persdat.txt", "r");
        while(fgets(input, 500, f) != NULL){
                line = strtok(input, ";");

                strcpy(p->vorname, line);

                line = strtok(NULL, ";");

                strcpy(p->nachname, line);
                printf("%s wurde eingelesen.\n", p->vorname);
                addToList(p);
                line[0] = '\0';
        }
}
void addToList(Person *p){
        Node *newNode = malloc(sizeof(Node));
        newNode->data = p;
        newNode->next = NULL;
        if (start == NULL){
                start = newNode;
                printf("%s wurde in die Liste eingefügt. (1. Stelle)\n", newNode->data->vorname);
        }else{
                Node *current = start;
                int stelle = 2;
                while(current->next != NULL){
                        printf("Liste wird durchlaufen... aktuelle Person: %s\n", current->data->vorname);
                        current = current->next;
                        stelle++;
                }
                current->next = newNode;
                printf("%s wurde in die Liste eingefügt (%d. Stelle).\n", newNode->data->vorname, stelle);
        }
}
void output(){
        Node *current = start;
        printf("%s\n", current->data->vorname);
    do{
                current = current->next;
                printf("%s\n", current->data->vorname);
                }while (current->next != NULL);

}

int main(int argc, char *argv[]) {

        printf("\n");
        readFile();
        output();
        return EXIT_SUCCESS;
}

结构Person 具有成员char *vornamechar *nachname。 结构Node 有成员Person *data 和结构Node *next(我输入了定义)。 start 是声明的列表。

这是我正在使用的文本文件:

Daniel;Smith
Florian;Mayne
Michael;Fabour
Manuel;Spoley
Andrea;Bree
Prapot;BumBum
Tobias;Sinkleeser
Nikolaus;Muffed

终端输出:

函数 output() 打印 8 次 Nikolaus 而我希望它输出我在列表中插入的 8 个名称,这是为什么呢?

【问题讨论】:

  • readFile:Person *p; 和 Person vornamenachname 的成员指向区域无法确保。
  • 嘿 Don7531,欢迎来到 Stackoverflow!我在你的帖子中复制了你的链接内容,因为stackoverflow的想法是今天帮助你的问题明天会帮助别人,一旦链接失效,这个问题就根本无法理解。

标签: c string file list text-files


【解决方案1】:

readFile() 中,您没有为struct Person 以及struct Person 的成员分配任何内存。

所以下面

void readFile(){
    FILE *f;
    Person *p;
    char input[501];
    char *line;
    f = fopen("persdat.txt", "r");
    while(fgets(input, 500, f) != NULL){
            line = strtok(input, ";");

            strcpy(p->vorname, line);
            ...

可能看起来更好:

void readFile(){
    FILE *f;
    Person * p = calloc(1, sizeof(*p));
    char input[501];
    char *line;
    f = fopen("persdat.txt", "r");
    while(fgets(input, 500, f) != NULL){
            line = strtok(input, ";");

            p->vorname = strdup(line);
            ...

(为了便于阅读,省略了错误检查)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    • 2016-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多