我正在使用C ++ 11.我想知道使用cin.getline ()
与gets ()
相比是否有任何好处。
我需要填充char
数组。
另外,我应该使用fgets
还是getline
来处理文件?
答案 0 :(得分:8)
我想知道使用cin.getline()与gets()相比是否有任何优势。
我假设你真的是gets
,而不是fgets
。
是的,肯定有。 gets
已知是一个安全问题。 cin.getline()
不会遇到这个问题。
值得比较fgets
和cin.getline
。
我看到的唯一区别是fgets
将在输出中包含换行符,而cin.getline
则不会。
大多数情况下,应用程序代码会忽略换行符。因此,最好一般使用cin.getline()
或istream::getline()
。如果由于某种原因输出中存在换行符对您很重要,则应使用fgets
。
首选istream::getline
的另一个原因是您可以为分隔符指定字符。如果需要解析逗号分隔值(CSV)文件,可以使用:
std::ifstream fstr("some file name.csv");
fstr.getline(data, data_size, ',');
答案 1 :(得分:3)
当然。
首先cin.getline
不检查输入的长度 - 所以如果输入的长度超过char数组,则会出现溢出。
另一方面,{{1}}允许指定流的大小。
无论如何,C ++程序员的共识是你应该避免使用原始数组。