cin.getline()不使用字符串大小

时间:2014-02-10 08:06:08

标签: c++ cin getline istream

是否可以使用cin.getline()而不表示数组大小? 也就是说,使用以下伪代码:

char array[15];
cin.getline(array,'.');  // '.' Is the delimiter.

这会有用吗?

2 个答案:

答案 0 :(得分:4)

是的:加入20世纪(!)世纪:

std::string str;
std::getline(std::cin, str, '.');

答案 1 :(得分:-1)

会发生什么:

这将编译并运行,但您的分隔符将不起作用,您将得到未定义的行为。此外,当未给出数组大小时,您将失去 1)异常处理。 (当输入高于大小时,您将得到 2)“堆栈损坏”运行时错误)。根据给定的尺寸,剩余长度将被削减。

1)异常处理:

如果为数组定义一个大小,它将对用户输入进行子串,这样就不会在字符串中写入比分配空间更多的字符。 (即超过15个)(这种类型的子字符串只有在您定义尺寸时才可用。

2)堆栈损坏错误:

如果没有定义大小,您将收到“堆栈损坏的错误”,这意味着您尝试写的数量超过分配的数量。

3)运行你的代码: 您的代码将运行,但您将在运行时具有未定义的行为。

http://coliru.stacked-crooked.com/a/64b881aa9f70c21d

以正确的方式行事: 正如已经提到的“轨道上的光线竞赛”,这是要走的路:

std::string str;
std::getline(std::cin, str, '.');

更多内容阅读:http://www.cplusplus.com/reference/string/string/getline/