填充char数组的最佳方法(获取vs cin.getline)

时间:2018-03-19 18:48:27

标签: c++ c++11

我正在使用C ++ 11.我想知道使用cin.getline ()gets ()相比是否有任何好处。

我需要填充char数组。

另外,我应该使用fgets还是getline来处理文件?

2 个答案:

答案 0 :(得分:8)

  

我想知道使用cin.getline()与gets()相比是否有任何优势。

我假设你真的是gets,而不是fgets

是的,肯定有。 gets已知是一个安全问题。 cin.getline()不会遇到这个问题。

值得比较fgetscin.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 ++程序员的共识是你应该避免使用原始数组。