首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与K&R C书有关扫描处理格式字符串中的空白和制表符的问题?

与K&R C书有关扫描处理格式字符串中的空白和制表符的问题?
EN

Stack Overflow用户
提问于 2020-05-09 21:45:52
回答 1查看 134关注 0票数 3

阅读布赖恩·克尼汉和丹尼斯·里奇的著名著作“C编程语言ANSI C第二版”,我在第7章( 7.4节)中找到了这本书。(第157页)下面这一段描述scanf的格式字符串

..。 格式字符串通常包含转换规范,用于控制输入的转换。格式字符串可能包含:

  • 空白或制表符,将被忽略。

..。

我记得现在我们使用格式字符串中的空格来告诉编译器跳过空白直到找到一个非空白字符。因此,我假设这一段不再有效,因为C语言经过多年的更新。我说的对不对?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-09 22:31:12

C圣经记录了一个过时的scanf()版本。早期版本的scanf()用于忽略输入字符串中的所有空白,因此格式字符串中的空白也被忽略。这种行为在C被ANSI标准化之前就已经改变了,后来又被ISO标准化了。

第二版的书封面确实提到了ANSI-C,但是关于scanf(),它的描述对于ANSI和以后的版本是不正确的。

事实上,1979年贝尔实验室的最初的Unix已经证明了这一点:第7版手册页

控制字符串通常包含转换规范,用于直接解释输入序列。控制字符串可能包含:

  1. 空格、制表符或换行符,它们与输入中的可选空白相匹配。
  2. 必须与输入流的下一个字符匹配的普通字符(不是%)。
  3. 转换规范,由字符%、可选赋值抑制字符*、可选数字最大字段宽度和转换字符组成。

没有实际的编译器支持书中记录的古代行为。在研究了K&R中这个令人惊讶的错误之后,scanf()似乎几乎从Unix系统的第一天起就有了当前的行为。scanf()一直是古怪和容易出错,这一伟大的发现增加了一系列的陷阱和陷阱。

您可以在本书的第二版中找到纠正某些错误的errata列表,但是没有列出这个特定的错误。

对于进一步的研究,可以在丹尼斯·里奇的主页布赖恩·克尼汉在书上的一页这里以及bitsavers.org档案上找到许多历史信息。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61704170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档