我正在尝试理解某人的代码而且他们有
while(fscanf(stdin_stream, "%*[^A-Za-z]"), fscanf(stdin_stream, "%198[a-zA-Z]", buffer) > 0)
%198对检查字母表中的所有字母做了什么?
由于这个问题,我得到了2分?为什么?因为我在论坛上提出了针对这些类型问题的问题?一堆bs。是的,我可以查看手册页,但是我没有找到一个解释它的人,因为以下答案确实如此。我正在寻找另一个信息来源来帮助我,因此我来到这里。但看到我得到一个问题的停靠点是荒谬的。
答案 0 :(得分:3)
fscanf()
函数使用"%"
的出现来表示以下字符,直至字母序列,例如"%...d"
,"%...f"
或"%...[...]"
意味着后续增加是存储扫描结果的地址。
fscanf()
格式的详细信息非常广泛,应查阅各种在线资源以便完全理解。我只想指出几个为什么198? (这似乎是OP的问题)。
"%198[..."
假设buffer
可以容纳198 char
+ \0
。
如果没有198,可以在char
中保存无数个buffer
,导致缓冲区溢出。
常见的混淆是buffer
的大小应该处理198 + 1 char
。
char buffer[198+1];
fscanf(stdin_stream, "%198[a-zA-Z]", buffer);