仅当在循环结束时再次对字符串进行malloc分配时,fgets循环才能正常工作

时间:2019-03-27 20:28:37

标签: c malloc fgets

我必须从文件中读取逗号分隔的行,分解这些逗号之间的参数,然后进行相应处理。我设置了以下代码来完全满足我的需要:

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还是重要

0 个答案:

没有答案