単語の配列を動的に割り当てる必要があります。単語は、空白文字の可変カウントで区切られたファイルに保存されます。ファイルに含まれる単語の数がわかりません。可変長にすることができます。
私はこのコードを持っています:
void readWord(FILE* stream, char *word, char first_c) {
word[0] = first_c;
char val;
int wlen = 1;
// isWhitespac is my function - tests if char is blank or '\n'
while ((val = fgetc(stream)) != EOF && isWhitespace(val) == 0) {
wlen++;
word = realloc(word, (wlen+1) * sizeof (char));
word[wlen-1] = val;
}
word[wlen] = '\0';
}
int readList(const char *file) {
FILE* f;
char **arr;
char val;
int wcount = 0;
arr = malloc(sizeof (char*));
f = fopen(file, "r");
while (fscanf(f, " %c", &val) == 1) {
wcount++;
arr = realloc(arr, wcount * sizeof (char *));
arr[wcount - 1] = malloc(sizeof (char));
readWord(f, arr[wcount-1], val);
printf("%s\n", arr[wcount-1]);
}
for (int i = 0; i < wcount; ++i) {
free(arr[i]);
}
free(arr);
fclose(f);
return 0;
}
それはうまく機能しているように見えます、それはすべての単語を印刷して読みます。しかし、Valgrindを使用してプログラムを実行すると、エラーが多すぎて見つけることができません。誰か助けてもらえますか?(mallocなどが正常に機能したかどうかをテストする必要があることはわかっています。これは単なるテスト機能です。)
Valgrindログはかなり長いですが、私も投稿する必要がありますか?