我正在尝试将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];
}
}
答案 0 :(得分:0)
除以下内容
fopen
和malloc
的返回值fgets
的返回值以下一行
fprintf(file, arr);
有一个问题是arr
中有一个%符号(这是用于格式化-请参见手册页)
使用以下内容
fprintf(file, "%s", arr);
相反。
编辑
编辑后,另一个问题:
return *arr;
这将返回堆栈中的数据-这将超出范围。
fprintf
仍然存在相同的问题-请阅读手册页