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

cin.getline() without using string size

本文关键字:字符串 getline cin      更新时间:2023-10-16

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

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

这行得通吗?

是:加入20世纪:

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

将会发生什么:

这将编译并运行,但您的分隔符不起作用,您将得到未定义的行为。此外,当没有给定数组大小时,您将失去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/