因此,在此代码中,我尝试获取文本文件,获取所有字符串标记并创建添加到链接列表中的节点。我能够从中获取每个单独的字符串令牌,并使用'数据创建一个节点。字段填写正确。当我尝试使用确定的函数来填充“类型”时出现问题。领域。我知道在这段代码中只有一个八进制检查但是在此之前我的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;
}
答案 0 :(得分:0)
3件事:
在你的add函数中,在做malloc之后总是释放内存是个好主意。 Malloc将为您的程序分配内存,只有在手动执行或关闭程序时才会释放内存。
此外,在determinedohf
中,您将返回指向该函数本地变量的指针。一旦函数返回,该内存位置可能无效,并且您正在读取垃圾值。
如果要使用返回的字符串,则需要使用malloc分配input
字符串。我强烈建议您用整数替换类型,并使用枚举来提高可读性。
枚举类型{ OCTAL = 0, 十进制 HEX }
您正在为node *
类型分配char
类型,这是一项无效的分配。我怀疑你想使用node *
的type元素。所以你应该做这样的事情:
strcpy(输入,链接 - >类型)
在C中,您不能在变量初始化后分配字符串。您需要使用strcpy来执行此操作。