【发布时间】:2016-01-09 15:36:15
【问题描述】:
我只是一名年轻的计算机科学专业的学生,目前我对从 stdin 读取字符串的最佳做法有点困惑。我知道有很多方法可以做到这一点,有些比其他更安全,等等...... 我目前需要一个防止缓冲区溢出并将空终止符 (\0) 附加到字符串末尾的函数。我发现 fgets 对此非常有用,但是......它会停止使用 \n 或 EOF 读取!如果我希望用户一次输入多行怎么办?是否有其他功能可以帮助我做到这一点? 如果这个问题对你们中的一些人来说似乎很愚蠢,我很抱歉,但请理解我! 任何帮助将不胜感激。
【问题讨论】:
-
Similar question 使用
getline -
输入总是需要在 EOF 结束,即用户在 Windows 上键入 CTRL + Z 或在 Linux 上键入 CTRL + D。
-
这个similar question 有一个解释如何使用
fgetc的答案 -
我知道为什么
fgets停在\n可能是个问题(尽管老实说,我确实不看到为什么它是一个问题 - 你可以再次运行它来获取下一行!)但是当它遇到EOF时你想象它会做什么? -
@arainone 我知道 fgetc、getc 和 getchar(void),它们的功能非常相似。我正在寻找的是一个类似于 fgets 的函数,因为它更安全(它不允许缓冲区溢出)并且它附加了一个空终止符。