私はcで新しく、このバグに何時間も立ち往生しています。私のコードは、txtファイルから各単語を読み込み、その単語をトライのノードに格納します。fscanfは何らかの形でノードを変更しています(C言語)
私はアスタリスクで区切られた領域に絞り込んだ: その時点で、最初の単語をトライに追加して、正しいノードの値がその単語と一致することを確認した。次に、fscanf
を使用して、ファイルの次の単語をchar 'add'として保存します。それで、以前とまったく同じことを印刷して、ノードの単語は同じままでなければなりません。しかし、それは何とかファイルから読み込まれたばかりの新しい単語に変更されています。
これはどのように可能ですか?
int main(int argc, char** argv) {
trie_t* trie = malloc(sizeof(trie_t));
trie_init(trie);
int ret;
char* add = malloc(128);
FILE* file = fopen(argv[5], "r");
if (file == NULL) {
/* Failed to open the file for reading */
return 0;
}
while (1) {*********************
if (trie->head->children != NULL) {
printf("%s\n", trie->head->children->word);
}
ret = fscanf(file, "%s", add);
//printf("word = %s\n",toAdd);
if (trie->head->children != NULL) {
printf("%s\n", trie->head->children->word);
}****************************
if (ret == EOF) {
/* End of file */
ret = 1;
break;
} else if (ret <= 0) {
printf("fails");
/* Failed to read a word from the file */
break;
} else {
printf("gets here\n");
/* Succesfully read a word */
int x = trie_add(trie, add);
printf("%d\n",x);
}
}
!ありがとう! – user1222613
私は 'malloc()'呼び出しで 'sizeof'の使用を推奨している最中ですが、' sizeof(char) 'は1であることに注意してください。すべてのプラットフォームで。だから、ここでは物事を改善するためにそれほど大したことはありません。 'char * add = malloc(128 * sizeof * add);'を使用すると、わかりやすく型の独立性を持たせることができます。 – unwind