我正在尝试实现二叉树来接受文件中的字符串。当我运行我的主文件时,我得到一个分段错误。我运行了gdb,它告诉我问题出在我的while循环中。我似乎无法弄明白为什么。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include "BiTree.h"
int main(int argc, char *argv[]) {
struct TreeNode *root = 0;
char string[20] = {0};
int ch = 0;
int i = 0;
FILE *inFile = fopen(argv[1], "r");
while(!feof(inFile)) {
do {
ch = fgetc(inFile);
if(isalpha(ch)) {
string[i] = ch;
}
i++;
} while(isspace(ch));
i = 0;
insert(string, root);
}
fclose(inFile);
displayTree(root);
destroyTree(root);
FILE *outFile = fopen(argv[2], "w");
fclose(outFile);
return 0;
}
答案 0 :(得分:1)
除了while(isspace(ch));
可能被while(!isspace(ch));
替换的问题之外,您需要在字符串末尾添加空字符,然后再将其发送到insert()
函数和此函数还应该为根变量返回一个新值:
string[i]= 0;
i=0;
root=insert(string,root);
你还应该确保i的值不高于19,以免超出字符串缓冲区的长度。