如何使用不包含空终止符的字符串捕获错误

时间:2014-11-15 20:08:27

标签: c++ null-terminated

下面附有一个相当简单的代码,其中文件名被手动输入到程序中,并被定义为大小为9的数组,在本例中是正确的。为简洁起见,文件的名称将传递给此处未包含的函数。该函数将读取数据中的文件作为五个向量字符串打开并将它们反馈给主程序,在那里可以通过指针算法访问它们。正如我在这种情况下提到的,该程序可以工作,但是如果我将File1的大小从9更改为8则不起作用,因为不考虑null终止符。为了使这个程序成为一个更安全的程序,我希望程序能够在字符串大小不包含空终止符并且跳过函数调用及其所有相关代码行时识别条件。但是,当未包含null终止符时,代码不会产生错误,因此我不确定如何在此实例中使用异常处理。任何想法都将不胜感激。

#include <vector>
#include <iostream>
#include <fstream>

#include "Read_Columnar_File.h"

int main(int argc, const char * argv[]) {
    std::vector<std::string> str3;
    std::vector<int> str4;
    std::vector<char> str5;
    std::vector<int> str6;

    unsigned long size_Misc;
    float Peak_Misc_Value;
    std::vector<float> MISC_DATA; // Reads in Misc. spending data
    char File1[9];
    strcpy(File1, "Misc.txt");
    Read_Five_Columns(File1,MISC_DATA,str3,str4,str5,str6);
    str3.clear(); str4.clear(); str5.clear(); str6.clear();
    size_Misc = MISC_DATA.size();
    auto max_Misc = std::max_element(MISC_DATA.begin(), MISC_DATA.end());
    Peak_Misc_Value = *max_Misc;
}

1 个答案:

答案 0 :(得分:2)

考虑使用std :: string作为文件名的容器。然后File1.c_str()应该始终是一个以空字符结尾的字符串。

如果你真的想做你在循环通过File1数组的问题中写的内容,并检查每个字符是否是&#39; \ 0&#39;会告诉你sting是否为空终止。我不建议像这样使用strcpy,因为它可能写出数组的界限。