当我将文件传递到链表时,如何读取文件并确定其数据表示?

时间:2016-07-17 22:27:02

标签: c pointers linked-list nodes tokenize

因此,在此代码中,我尝试获取文本文件,获取所有字符串标记并创建添加到链接列表中的节点。我能够从中获取每个单独的字符串令牌,并使用'数据创建一个节点。字段填写正确。当我尝试使用确定的函数来填充“类型”时出现问题。领域。我知道在这段代码中只有一个八进制检查但是在此之前我的gcc编译器告诉我对指针/ char有不正确的强制转换,我不理解。 我在确定的函数中错过了什么或者没有正确做什么?我觉得参数等也可能不正确,但我不确定如何...

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

typedef struct node {

    char *data;
    char *type;
    struct node *next;

} node;


void readfile(char* filename) {

    FILE *file = fopen(filename, "r");

    if(file == NULL) {
        exit(1);
    }

    char buffer[51];

    while(fscanf(file, "%s", buffer) != EOF) {

        add(buffer);
    }

    fclose(file);
}

void add(char* line) {

    node *temp = malloc(sizeof(node));
    temp->data = strdup(line);
    temp->type = determine(line);
    temp->next = NULL;
    current = start;

    if(start == NULL) {
        start = temp;
    } else {
        while(current->next != NULL) {
            current = current->next;
        }
        current->next = temp;
    }
}

char* determineDOHF(node* line){

      /*supposed to determine whether the string is represented as
      decimal, octal, hex, or floating point*/
    char *dohfType;
    char input[51] = line;
    if(input[0] == '0'){
        dohfType = 'Octal';
    }

    return dohfType;

}

1 个答案:

答案 0 :(得分:0)

3件事:

  1. 在你的add函数中,在做malloc之后总是释放内存是个好主意。 Malloc将为您的程序分配内存,只有在手动执行或关闭程序时才会释放内存。

  2. 此外,在determinedohf中,您将返回指向该函数本地变量的指针。一旦函数返回,该内存位置可能无效,并且您正在读取垃圾值。 如果要使用返回的字符串,则需要使用malloc分配input字符串。我强烈建议您用整数替换类型,并使用枚举来提高可读性。

    枚举类型{              OCTAL = 0,              十进制              HEX            }

  3. 您正在为node *类型分配char类型,这是一项无效的分配。我怀疑你想使用node *的type元素。所以你应该做这样的事情:

    strcpy(输入,链接 - >类型)

  4. 在C中,您不能在变量初始化后分配字符串。您需要使用strcpy来执行此操作。