我遇到過這樣一個getword的例子。 我明白所有的檢查等,但我有ungetc的問題。瞭解ungetc在一個簡單的getword中使用
當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;
編輯 @馬克拜爾斯 - 感謝,但c的拒絕是有目的的,而不會在一個無限循環一次又一次滿足條件?
這是一個'getword'功能,而不是'getwordahdonemorecharacterww anyitmaybe''。它會讀取,直到遇到不是字母數字的字符。然後它將該角色放回流中並返回。大概它會返回一個字符指針,但是你省略了函數聲明,所以我不能100%確定。循環後的if語句中的'!isalpha(c)'等同於真,因爲字符永遠不會是字母的(如果是的話,循環就不會被破壞)。除非循環在錯誤處理過程中能夠中斷。 – Wug