そのような getword の例に出くわしました。私はすべてのチェックなどを理解していますが、ungetc に問題があります。
がc
満たしif ((!isalpha(c)) || c == EOF)
、また満たさない場合while (isalnum(c))
-> それは文字でも数字でもありません - それungetc
を拒否しchar
ます。
だとしましょう'\n'
。
その後、取得しreturn word
ますが、配列に保存されていないため、返すことはできません。その後どうなりますか?
while (isalnum(c)) {
if (cur >= size) {
size += buf;
word = realloc(word, sizeof(char) * size);
}
word[cur] = c;
cur++;
c = fgetc(fp);
}
if ((!isalpha(c)) || c == EOF) {
ungetc(c, fp);
}
return word;
EDIT @Mark Byers - ありがとう、しかしその c は目的のために拒否され、無限ループで何度も条件を満たさないでしょうか?