有人告诉我应该使用fgets和sscanf而不是scanf,我只是想知道是否存在与scanchar问题类似的与getchar()和putchar()相关的问题。
答案 0 :(得分:1)
scanf
的主要问题在于它的模式语言并不总是允许足够的控制,特别是如果您想将输入限制为面向行的格式时。通过指定大小限制可以克服的第二个问题是,默认情况下,字符串字段的大小不受限制,因此可能会溢出其目标缓冲区。
getchar
不会遇到任何一个问题,出于我希望显而易见的原因。
答案 1 :(得分:0)
自getchar
和putchar
(不同于gets
,scanf
,fgets
)以来,没有使用char
类型,而不使用char *
,所以没有缓冲区就没有缓冲区溢出的风险(因为I / O被缓冲了,所以有一个缓冲区,但是您不能控制它的大小,并且可以由C库正确管理)
在循环中使用它们时要小心,不要在自己的代码中重新创建安全性问题,而这些问题是您要避免的。
如果您的目标是使用getchar
读取字符串,则必须创建一个循环来存储字符。如果不小心,可能会遇到相同的缓冲区溢出问题。问题刚移到代码中的其他地方。