C++11 字符串大小限制输入cin.get()和getline()

C++11 字符串大小限制输入cin.get()和getline(),c++11,input,user-input,cin,getline,C++11,Input,User Input,Cin,Getline,在此项目中,用户可以键入文本(最多140个字符)。 因此,对于这个限制,我曾经使用过getline(): 但是在这种情况下,cout您的第一种方法的结果是正确的,只需一次更正-您需要使用 text = text.substr(0, 140); 而不是text=text.substr(1140)。C/C++中的容器(包括一个字符串)以索引0开头,您正在请求从位置1修剪该字符串。这很好,但是如果字符串恰好只有一个字符长,则调用text.substr(1140)不一定会导致程序崩溃,但也不会以所需的

在此项目中,用户可以键入文本(最多140个字符)。 因此,对于这个限制,我曾经使用过
getline()


但是在这种情况下,
cout您的第一种方法的结果是正确的,只需一次更正-您需要使用

text = text.substr(0, 140);
而不是
text=text.substr(1140)。C/C++中的容器(包括一个字符串)以索引0开头,您正在请求从位置1修剪该字符串。这很好,但是如果字符串恰好只有一个字符长,则调用
text.substr(1140)
不一定会导致程序崩溃,但也不会以所需的输出结束

根据,如果在起始位置大于字符串长度的情况下调用,
substr
将抛出超出范围的异常。对于单字符字符串,位置1将等于字符串长度,但返回值没有意义(事实上,它甚至可能是未定义的行为,但我找不到对该语句的确认-在您和我的情况下,调用它将返回空字符串)。我建议您在上面链接后面的交互式编码部分自己测试它

第二种方法尝试将字符串传递给需要C样式字符数组的函数。同样,可以找到更多。正如错误所说,编译器找不到匹配的函数,因为参数是字符串而不是字符数组。有些函数将执行字符串到字符的转换,但这里不是这种情况。你可以自己把字符串转换成char数组,比如说,但是第一种方法更符合C++的实践。 最后一点-目前您只读取了一行输入,我想您会想更改它

cin.get(text, 140);
text = text.substr(0, 140);