是否可以使用cin.getline()
而不表示数组大小?
也就是说,使用以下伪代码:
char array[15];
cin.getline(array,'.'); // '.' Is the delimiter.
这会有用吗?
答案 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/