c逐行将字符串写入文件

hkv*_*ega 1 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);

    }
Run Code Online (Sandbox Code Playgroud)

pax*_*blo 10

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

fprintf (fp, "%d\n", tree->pop);
Run Code Online (Sandbox Code Playgroud)

fwrite 有以下原型:

size_t fwrite (const void *restrict buff,
               size_t               sz,
               size_t               num,
               FILE *restrict       hndl);
Run Code Online (Sandbox Code Playgroud)

而且,由于你甚至没有在你的通话中给出最重要的第四个参数(文件句柄),它可以随心所欲.

一个体面的编译器应该警告你这件事.

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

您可能希望在递归函数之外打开文件,并在其中使用它.

就像是:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)