У меня есть довольно простой код, прикрепленный ниже, где имя файла вводится вручную в программу и определяется как массив размером 9, что является правильным в этом примере. Имя файла передается функции, которая не включена здесь для краткости. Функция откроет файл в считанных данных как пять векторных строк и вернет их в основную программу, к которой к ним можно получить доступ с помощью арифметики указателя. Как я уже упоминал в этом случае, программа работает, но если я изменю размер файла 1 с 9 по 8, это не сработает, потому что нулевой ограничитель не учитывается. В духе того, чтобы сделать эту более безопасную программу, я хотел бы, чтобы программа распознавала условия, когда размер строки не включает нулевой ограничитель и пропускает вызов функции и все связанные с ней строки кода. Однако, когда нулевой терминатор не включен, код не вызывает ошибки, поэтому я не уверен, как использовать обработку исключений в этом экземпляре. Любые мысли были бы оценены.
#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", если вы хотите, чтобы жало не было завершено. Я бы не рекомендовал использовать такой тип strcpy, поскольку он может выписывать границы вашего массива.
char File1[] = "Misc.txt";