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);
}
答案 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);
}
}