我必须从文件中读取逗号分隔的行,分解这些逗号之间的参数,然后进行相应处理。我设置了以下代码来完全满足我的需要:
char *string = malloc(MAX_INPUT);
char * current_parent;
char * current_child;
// while there are still lines to read from the file
while(fgets(string, BUFF_SIZE, file) != NULL){
// get the parent of a line and its first child
current_parent = trim(strtok(string, ","));
if(strcmp(current_parent, "") != 0){
current_child = trim(strtok(NULL, ","));
if(current_child == NULL || strcmp(current_child, "") == 0){
tree = add_child(tree, current_parent, "");
}
else{
while(current_child != NULL){
tree = add_child(tree, current_parent, current_child);
current_child = trim(strtok(NULL, ","));
}
}
current_parent = 0;
current_child = 0;
}
string = (char *)malloc(MAX_INPUT);
}
// close the file
free(string);
fclose(file);
文件示例:
john 1, sam 2
sam 2, ben 4, frances, sam 3
ben 4, sam 4, ben 5, nancy 2, holly
ben 5, john 2, sam 5
第一个逗号之前的是父母的名字,其后所有其他字符串是其孩子的名字。
我的问题是,无论出于什么原因,如果我在循环末尾重新分配字符串时,它只能正确读取数据。除此之外,如果我尝试在再次分配malloc之前释放内存,它将不起作用-导致内存泄漏。我什至尝试将循环设置为仅使用固定大小的字符串,但最后它仍会读取这些混乱的数据。我还尝试在每个循环的末尾手动清空字符串。我有一种感觉,就是我可能忽略了一些非常简单的事情,但这使我发疯。让我知道是否可以提供其他帮助。谢谢。
编辑:不知道这对MAX_INPUT和BUFF_SIZE都是1024还是重要