【问题标题】:Why does comapring two vectors throws me an exception?为什么比较两个向量会引发异常?
【发布时间】:2021-12-04 21:54:30
【问题描述】:

比较 if 语句中的两个向量会引发异常(分段错误)。

 #include <iostream>
 #include <vector> 
 #include <fstream>
 #include <string>
    
    
        std::vector<std::string>setup_file_contents_vec{};
        std::ifstream setup_file_required_scan( "exposcan.txt" );    
        std::string buffer;
        while(setup_file_required_scan >> buffer) { setup_file_contents_vec.push_back(buffer); }
        std::vector <std::string> user_details_confirmation(3);
        for (int i = 0; i < 4; i++){ std::cout << " "; }
        std::cout << " Login details 1/3\n\n";
        for (int i = 0; i < 6; i++){ std::cout << " "; }
        std::cout << "First Name : ";
        std::cin >> user_details_confirmation[0];
        if(user_details_confirmation[0] != setup_file_contents_vec[0]) {/* code */}

【问题讨论】:

  • 即使在添加main 函数以尝试使其在某种程度上有效的minimal reproducible example 时,它仍然不会复制您询问的问题。代码根本不应该构建。当您执行std::cin &gt;&gt; user_details_confirmation[0] 时,不应有任何“输入”运算符&gt;&gt;。请创建一个正确的minimal reproducible example,它可以复制您询问的问题,并且没有其他错误。 IO 事实上,复制粘贴你拥有的实际代码,如果它足够少的话。
  • 在不相关的笔记上,而不是例如for (int i = 0; i &lt; 6; i++){ std::cout &lt;&lt; " "; } 为什么不简单地 std::cout &lt;&lt; " ";
  • 添加#include &lt;string&gt; 有帮助吗?由于您使用的是std::string,因此您应该包含定义它的标头。
  • @IgorTandetnik 我已经有了,只是我忘了在这个问题中包含它。
  • 一种可能:文件exposcan.txt为空或当前工作目录中不存在,所以setup_file_contents_vec为空,然后setup_file_contents_vec[0]表现出未定义的行为。

标签: c++ c++11 vector


【解决方案1】:

感谢@IgorTandetnik,问题是文件是空的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    相关资源
    最近更新 更多