【发布时间】:2015-01-14 08:04:39
【问题描述】:
例如,当我执行 scanf("%s",arg); 时:终端允许我输入文本,直到遇到换行符,但它最多只能存储 arg 变量内的第一个空格字符。剩余部分保留在缓冲区中。
scanf("%c", arg); :在这种情况下,它还允许我在终端中输入文本,直到我给出一个换行符,但只有一个存储在 arg 中,其余的保留在缓冲区中。
scanf("%[^P]", arg); :在这种情况下,即使在给它一个换行符之后,我也可以在终端中输入文本,直到我点击带有“P”的行并按回车键(换行符),然后将所有内容传输到输入缓冲区。
如何确定一次从输入流中传输多少数据到输入缓冲区?
假设arg 是正确的类型。
我的理解似乎从根本上是错误的。如果有人能解释一下这些东西,我将非常感激。
【问题讨论】:
-
这里涉及更多层。
gnome-terminal-server-> ptmx -> 内核 -> pts -> 你的进程的read()调用 -> libc 缓冲 ->scanf() -
keyboard-electrical-contact -> keyboard-matrix-scanner -> usb-interface -> keyboard-driver -> gnome-terminal-server -> ...- 我可能也错过了很多 :-)
标签: c input buffer stdin scanf