fprintf начинает печатать со странными символами, затем начинает печатать нормально - PullRequest
0 голосов
/ 17 марта 2020

Я столкнулся с проблемой при попытке записи в файл с помощью fprintf (). Когда я начинаю записывать в файл, первые несколько строк состоят из полуслучайных недопустимых символов, а после этого остальные выводятся нормально. Я понятия не имею, что может вызвать проблему. Ниже приведен код, вызывающий проблему.

Функции, вызываемые:

double calc_time(clock_t s, clock_t e){
    return ((double)(e-s) / (sysconf(_SC_CLK_TCK)));
}

void print_times(FILE *f, char *operation, clock_t s, clock_t e, struct tms *st, struct tms *et){
    printf("%s", operation);
    printf("\nREAL TIME: %f\n", calc_time(s,e));
    printf("USER TIME: %f\n", calc_time(st->tms_utime,et->tms_utime));
    printf("SYS TIME: %f\n", calc_time(st->tms_stime,et->tms_stime));
    printf("HERE");
    fprintf(f,"%s", operation);
    fprintf(f,"\nREAL TIME: %fl", calc_time(s,e));
    fprintf(f,"\nUSER TIME: %fl", calc_time(st->tms_utime,et->tms_utime));
    fprintf(f,"\nSYS TIME: %fl", calc_time(st->tms_stime,et->tms_stime));
}

, и печать происходит здесь:

    f = fopen("raport2.txt","a");

    clock_t r_times[2];
    struct tms* t_times[2];
    t_times[0] = calloc(1,sizeof(struct tms));
    t_times[1] = calloc(1,sizeof(struct tms));

    r_times[0] = times(t_times[0]);

    struct block_array* array = create(4);
    r_times[1] = times(t_times[1]);

    print_times(f, "\nCreating array", r_times[0], r_times[1], t_times[0], t_times[1]);

    r_times[0] = times(t_times[0]);

    struct file_sequence seq = seq_def("t1.txt t2.txt b1.txt b2.txt");
    char *tmp = compare(seq);
    create_blocks(array,tmp,4);
    r_times[1] = times(t_times[1]);

    print_times(f,"\nCreating blocks",r_times[0],r_times[1],t_times[0],t_times[1]);

    r_times[0] = times(t_times[0]);

    delete_block(array,1);
    delete_block(array,2);
    delete_block(array,3);
    delete_block(array,4);
    r_times[1] = times(t_times[1]);

    print_times(f, "\nDeleting blocks", r_times[0], r_times[1], t_times[0], t_times[1]);

Ответы [ 2 ]

1 голос
/ 18 марта 2020

Ошибка была вызвана частью кода, отличной от той, что указана во фрагментах (хотя исходный код github по-прежнему будет воспроизводить ее). Оказывается, что в другой части программы, которую я записывал в файл, не стирая его прежнее содержимое (я думал, что touch делает это), затем данные, извлеченные из файла, вызывали утечки памяти и проблемы с распределением всех типов.

0 голосов
/ 17 марта 2020

Используйте %lf для печати дубликатов вместо опечатки %fl, которую вы используете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...