使用getchar()和putchar()是否安全?

时间:2018-11-10 22:52:42

标签: c

有人告诉我应该使用fgets和sscanf而不是scanf,我只是想知道是否存在与scanchar问题类似的与getchar()和putchar()相关的问题。

2 个答案:

答案 0 :(得分:1)

scanf的主要问题在于它的模式语言并不总是允许足够的控制,特别是如果您想将输入限制为面向行的格式时。通过指定大小限制可以克服的第二个问题是,默认情况下,字符串字段的大小不受限制,因此可能会溢出其目标缓冲区。

getchar不会遇到任何一个问题,出于我希望显而易见的原因。

答案 1 :(得分:0)

getcharputchar(不同于getsscanffgets)以来,没有使用char类型,而不使用char * ,所以没有缓冲区就没有缓冲区溢出的风险(因为I / O被缓冲了,所以有一个缓冲区,但是您不能控制它的大小,并且可以由C库正确管理)

在循环中使用它们时要小心,不要在自己的代码中重新创建安全性问题,而这些问题是您要避免的。

如果您的目标是使用getchar读取字符串,则必须创建一个循环来存储字符。如果不小心,可能会遇到相同的缓冲区溢出问题。问题刚移到代码中的其他地方。