Функция, которая считывает потоки файлов и печатает их на экране, вызывает неопределенное поведение, и я не могу локализовать причину. Это работает, если загружен файл, содержащий менее двух строк, иначе он сработает.Сценарий для загрузки файлов не работает из-за поводной причины
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <inttypes.h>
char *getText (FILE* fp)
{
uint_64 size;
uint_64 i = 0;
int chr;
char *source;
fseek(fp, 0L, SEEK_END);
size = ftell(fp);
source = calloc(size + 1, sizeof(char));
fseek(fp, 0, SEEK_SET); // rewind
while(chr != EOF)
source[i++] = (chr = fgetc(fp));
source[size] = '\0'; // Terminate string
return(source);
}
int main(void)
{
char sfile [256];
FILE* fp;
char *file;
char buff [256];
printf("Enter name of file: ");
scanf("%s", sfile);
if(!strncmp(sfile, "read-", strlen("read-")))
{
fp = fopen(sfile + strlen("read-"), "r");
file = getText(fp);
sprintf(buff, file);
printf(buff);
fclose(fp);
free(file);
}
return 0;
}
Вы должны быть немного более конкретными, чем «неопределенное поведение» , Что делает программа? Является ли он детерминированным (всегда делает то же самое или следует какой-то схеме)? Какую отладку вы уже пробовали? – aruisdante
Я решил, что он сработает, если строки потока файлов> 2 и я уже это описал. Программа обычно срабатывает немедленно .. иногда она сбой срабатывает .. иногда при завершении, иногда появляется текст, а затем падает, иногда он вообще не появляется. –
вы пытались использовать gdb, чтобы увидеть * почему * он сбой? Получаете ли вы какой-либо текст ошибки при сбое? Вы уверены, что это не просто заканчивается чисто так, как вы этого не ожидаете? – aruisdante