我遇到过这样一个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