【问题标题】:Unexpected return from cin.getline() in C++C++ 中 cin.getline() 的意外返回
【发布时间】: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++不会自动为您完成。

标签: c++ cin getline


【解决方案1】:

添加#include &lt;string.h&gt;并更改

for(int i = sizeof(text)-1; i &gt;= 0; i--){

for(int i = strlen(text)-1; i &gt;= 0; i--){

因为strlen(text) 计算的长度最多为\n,其中sizeof(text) 也包括\n

或者正如评论中提到的Ruks,一个简单的初始化char text[100] {}; 可以工作。

【讨论】:

  • 您不应该将scanf 用于没有长度说明符且未检查返回值的字符串。
【解决方案2】:

只需将文本声明为与char[] text = new char[]{};相同的空数组

【讨论】:

  • 语法无效。
猜你喜欢
  • 2013-06-26
  • 2023-02-22
  • 2016-12-20
  • 1970-01-01
  • 2021-08-22
  • 1970-01-01
  • 2020-06-24
  • 2015-08-18
  • 1970-01-01
相关资源
最近更新 更多