导致程序返回奇怪符号的未知错误

Posted

技术标签:

【中文标题】导致程序返回奇怪符号的未知错误【英文标题】:unknown bug causing program to return weird symbols 【发布时间】:2019-08-05 09:59:51 【问题描述】:

我编写了一个非常基本的程序来将元音从输入字符串中分离出来。 该程序正在分离元音,但也返回奇怪的符号/字母!

我真的找不到它发生的原因!帮忙!

输出>>

aoeeo x ╘E⌡óì

每次我运行它都会生成不同的字母(?)!

代码>>

#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main()
  string input = "***";
  vector<char>  vowels = 'a','e','i','o','u';
  vector<char> result;

  for(int i = 0 ; i < input.size() ; i++)
    for(int j = 0; j < vowels.size(); j++)
      if(input[i] == vowels[j])
      result.push_back(input[i]);
      
    
      if (input[i] == 'u' || input[i] == 'e') 
        result.push_back(input[i]);
      
  

  for(int i = 0 ; i < input.size() ; i++)
    cout << result[i];
  

  return 0 ;

【问题讨论】:

"***" 中只有四个元音,没有一个是 'u' 或 'e',所以result 打印前的大小为 4。但是,最后一个循环使用input.size() 来控制循环打印result 的元素,因此打印一个带有四个字符的向量的13 个字符。这给出了未定义的行为 【参考方案1】:

您从未分配的内存中读取。元音存储在小于输入向量的结果向量中。将打印循环更改为:

for(int i = 0 ; i < result.size() ; i++)
cout << result[i];

【讨论】:

注意:使用for (auto ch : result) cout &lt;&lt; ch;可以避免这个问题

以上是关于导致程序返回奇怪符号的未知错误的主要内容,如果未能解决你的问题,请参考以下文章

ReSharper WPF 错误:“由于未知 DataContext,无法解析符号“MyVariable””

未知错误:由于未知错误导致页面崩溃,会话被删除:无法从 ChromeDriver Selenium 崩溃的选项卡中确定加载状态

Discord.js DiscordAPI 错误:未知表情符号 - 对嵌入做出反应

代码设计返回未知错误 -1=ffffffffffffffff

QProcess 未知错误

如何解决sprintf参数类型错误导致程序崩溃