C++ 中 cin.getline() 的意外返回
Posted
技术标签:
【中文标题】C++ 中 cin.getline() 的意外返回【英文标题】:Unexpected return from cin.getline() in C++ 【发布时间】:2021-08-04 09:04:04 【问题描述】:我有一个问题,当我使用 getline() 函数输入一个 char 数组时,它还会插入其他字符,这些字符不是恒定的,并且每次运行程序时都会改变。
我确实意识到这很可能是因为发生了某种溢出,它只是从 RAM 中获取数字。
但是有没有可能解决这个问题? (程序应该反转一个字符串并删除所有非字母,不包括空格)
这是我的程序:
#include <iostream>
#include <ctype.h>
#include <string>
using namespace std;
int main()
string decoded = "";
char text[100];
cin.getline(text,sizeof(text));
for(int i = sizeof(text)-1; i >= 0; i--)
if (isalpha(text[i]) || text[i] == ' ' )
decoded.push_back(text[i]);
cout << decoded;
return 0;
【问题讨论】:
char text[100] ;
。您需要自己将数组初始化为零,C++不会自动为您完成。
【参考方案1】:
添加#include <string.h>
并更改
for(int i = sizeof(text)-1; i >= 0; i--)
到
for(int i = strlen(text)-1; i >= 0; i--)
因为strlen(text)
计算的长度最多为\n
,其中sizeof(text)
也包括\n
。
或者正如评论中提到的Ruks
,一个简单的初始化char text[100] ;
可以工作。
【讨论】:
您不应该将scanf
用于没有长度说明符且未检查返回值的字符串。【参考方案2】:
只需将文本声明为与char[] text = new char[];
相同的空数组
【讨论】:
语法无效。以上是关于C++ 中 cin.getline() 的意外返回的主要内容,如果未能解决你的问题,请参考以下文章
C++基础:各种输入方法总结,cincin.get()cin.getline()getline()gets()getchar()
cin,cin.get(),cin.getline(),getline()