如何捕获不包含 null 终止符的字符串的错误

How to catch an error with a character string not containing a null terminator

本文关键字:字符串 错误 终止 null 何捕获 包含      更新时间:2023-10-16

我在下面附加了一个相当简单的代码,其中文件名被手动输入到程序中,并被定义为大小为 9 的数组,这在本例中是正确的。 为了简洁起见,将文件名传递给此处未包含的函数。 该函数将在读取数据时以五个向量字符串的形式打开文件,并将它们反馈回主程序,在那里可以通过指针算法访问它们。 正如我在这种情况下提到的,该程序可以工作,但是如果我将 File1 的大小从 9 更改为 8,它不起作用,因为没有考虑空终止符。 本着使这个程序更安全的精神,我希望程序能够识别字符串大小不包括空终止符的条件,并跳过函数调用及其所有相关代码行。 但是,当不包含 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;
}

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

如果你真的想做你在问题中写的东西,循环遍历 File1 数组并检查每个字符是否为"\0"会告诉你刺痛是否以 null 终止。我不建议像这样使用 strcpy,因为它可能会写出数组的界限。