我的输出文件中出现了奇怪的符号,而不是适当的字母

时间:2019-06-24 01:01:55

标签: c binary-search-tree

我正在尝试将BST的遍历输出到输出文件。但是,有时我会得到奇怪的符号而不是标准输入。

我尝试为char arr []分配额外的空间,但是它没有任何改变。

编辑:我更改了代码,并尝试将其分为两部分。一种方法,其中一种方法将每个节点按非先后顺序分配给节点数组,然后返回该数组。第二个是将返回值内容写入文件的另一个数组。这次虽然我遇到2个错误。

错误:从类型“ bstNode”分配为类型“ struct bstNode *”时,类型不兼容 错误:从类型“ bstNode”分配为类型“ struct bstNode *”时,类型不兼容

void traverseTree(bstNode *root){
        FILE *file;
        file = fopen("newFile", "w");
        char *arr;
        arr = (char*)malloc(10000 * sizeof(char));
        if(root == NULL)
                return;

        traverseTree(root->left);
        fgets(arr, 100, stdin);
        fprintf(file, arr);
        traverseTree(root->right);

}

下面的新代码

bstNode* traverseTree(bstNode *root, int i){

        bstNode *arr[100];
        if(root == NULL)
                return;

        traverseTree(root->left, i);

        arr[i] = root;
        ++i;
        traverseTree(root->right, i);

 return *arr;
}

void writeToFile(bstNode *root, char *outputFileName){
        FILE *file;
        file = fopen("newFile", "w");
        bstNode *arr = traverseTree(root, 0);
        int i = 0;
        root = arr[i];
        while(root!= NULL){
        fprintf(file, root->data);
        ++i;
        root = arr[i];
        }

}

1 个答案:

答案 0 :(得分:0)

除以下内容

  • 反复打开同一文件
  • 不检查fopenmalloc的返回值
  • 不需要从malloc进行强制转换
  • 不检查fgets的返回值

以下一行

fprintf(file, arr);

有一个问题是arr中有一个%符号(这是用于格式化-请参见手册页)

使用以下内容

fprintf(file, "%s", arr);

相反。

编辑

编辑后,另一个问题:

return *arr;

这将返回堆栈中的数据-这将超出范围。

fprintf仍然存在相同的问题-请阅读手册页