Запрограммируйте ошибки в работе между 2 printf()

Надеюсь, кто-то может помочь. Я прекрасно запустил эту программу, переместил несколько строк кода из одной функции в другую, и все это развалилось.

Я включил фрагмент ниже от вершины функции до segfault. К счастью, получается "мы сюда попали?" но не следующее утверждение, я потратил так много времени, пытаясь понять это, что не могу вспомнить рабочую сборку, с которой мне пришлось начинать

Предполагается, что он (по крайней мере, в следующем разделе) копирует весь текстовый файл в строку

Мораль истории: рабочий код лучше, чем "правильный" код, всегда копируйте рабочий код, прежде чем пытаться его подправить.

void validateFile(FILE* file, char** menuStore, char** submenuStore)
{

    char* temp = NULL;
    size_t size;
    boolean flag = true;
    char first;

    /*Loop Counter*/
    int i;

    fseek(file, 0, SEEK_END);
    size = ftell(file) * sizeof(char);
    fseek(file, 0, SEEK_SET);

    if ((temp = malloc(size)) == NULL)
    {
        printf("\nUnable to allocate Memory, Program exiting");
        exit(EXIT_FAILURE);
    } else
    {
        for (i = 0; i < (size / sizeof(char)); i++)
        {
            temp[i] = fgetc(file);
        }

        printf("\n did we get here?");
        printf("\nFile loaded, validating...");

1 ответ

Решение

При чтении из файла вы не должны использовать цикл как этот

for (i = 0; i < (size / sizeof(char)); i++)
{
    temp[i] = fgetc(file);
}

Вы должны проверить EOF состояние при чтении из файла

i=0;
while((temp[i]=fgetc(file))!=EOF)
     i++;

и сделать конец строки \0, Это лучший способ сделать.

temp[i]='\0';
Другие вопросы по тегам