Я во втором семестре моего колледжа, поэтому я только начал программировать.
Недавно мы узнали кое-что о бинарных деревьях. Поэтому я просто хотел написать свои собственные. Я решил закодировать двоичный список контактов в дереве.
Сначала я сохраняю свою структуру в файл .txt. (Я хочу, чтобы он был в текстовом файле, а не в двоичном, потому что тогда я смогу прочитать его после программы.) После этого я пытаюсь снова загрузить его в узел, чтобы перестроить мое двоичное дерево.
Здесь мы идем с сокращенной версией. Я прокомментировал важные части.
#define CLEN 100
struct binarytree {
struct binarytree *left;
struct binarytree *right;
char *firstname;
char *lastname;
char *city;
char *street;
char *addr;
char *tel;
} typedef btree;
//-----------------------------------------
btree *creatnullnode(void);
btree *loadtree(char *filename);
//-----------------------------------------
btree *creatnullnode(void) {
btree *node = malloc(sizeof(btree));
node->left = NULL;
node->right = NULL;
//TODO: the memmory is not right allocated..
node->firstname = (char*)malloc(CLEN * sizeof(char));
node->lastname = (char*)malloc(CLEN * sizeof(char));
node->city = (char*)malloc(CLEN * sizeof(char));
node->street = (char*)malloc(CLEN * sizeof(char));
node->addr = (char*)malloc(CLEN * sizeof(char));
node->tel = (char*)malloc(CLEN * sizeof(char));
return node;
}
btree *loadtree(char *filename) {
FILE *fp;
btree *tree = NULL;
btree *node = creatnullnode();
char ch = "";
int lines = 0;
fp = fopen(filename,"r");
if (!fp) {
printf("Error. no file\n");
return NULL;
} else {
while (!feof(fp)) {
ch = fgetc(fp);
if (ch == '\n')
lines++;
}
fseek(fp, 0,(int)lines % 2);
//TODO: right here the memory of every char can't be read anymore
fscanf(fp, "%s\t\t%s\t\t\t%s\t%s\t\t%s\t\t%s\n",
&node->firstname, &node->lastname, &node->addr, &node->city,
&node->street, &node->tel);
tree = insertnode(tree, node);
fseek(fp, 0, 0);
//rekursiveload(&tree, fp); //TODO: - ausprogrammieren -
}
fclose(fp);
return tree;
}
Во время отладки я увидел, что память не была правильно распределена. Но я не знаю, как это исправить.
после выделения char [] устанавливается в: node->firstname = 0x007db250
"ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍýýýýM¸Þµ¦æ"
Отладчик говорит: <Error reading the characters of the string.>
после fscanf