c逐行将字符串写入文件

时间:2011-06-10 06:50:17

标签: c

fwrite不起作用,我的代码出了什么问题?

void printTree (struct recordNode* tree) {
        char* report1;

        FILE *fp = fopen("test.txt","w");

        if (tree == NULL) {
          return;
        }
        //if(fp) {

          counter2++;
          printTree(tree->right);

          fwrite(fp,"%d\n", tree->pop);
          //putc(tree->pop, fp);

          //report1 = printf("%s = %d\n");
          printTree(tree->left);

        //}
        fclose(fp);

    }

1 个答案:

答案 0 :(得分:10)

fwrite没有这样的格式化输出,您需要fprintf

fprintf (fp, "%d\n", tree->pop);

fwrite有以下原型:

size_t fwrite (const void *restrict buff,
               size_t               sz,
               size_t               num,
               FILE *restrict       hndl);

并且,因为你甚至没有给你它所有重要的第四个参数(文件句柄),它可以很好地随意。

一个体面的编译器应该警告过你。

你这里还有另一个问题。每次调用此函数时,都会重新创建输出文件。这对于递归函数来说并不好,因为每次重复调用都会破坏已经写入的信息。

您可能想要打开递归函数的文件,只需在其中使用

类似的东西:

static void printTreeRecur (FILE *fp, struct recordNode* tree) {
    if (tree == NULL) return;

    printTreeRecur (fp, tree->right);
    fprintf (fp, "%d\n", tree->pop);
    printTreeRecur (fp, tree->left);
}

void printTree (struct recordNode* tree) {
    FILE *fp = fopen ("test.txt", "w");
    if (fp != NULL) {
        printTreeRecur (fp, tree);
        fclose(fp);
    }
}