fprintf开始使用奇怪的字符进行打印,然后继续正常打印

时间:2020-03-16 23:47:38

标签: c file printf

尝试使用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 个答案:

答案 0 :(得分:1)

该错误是由与代码段中提供的代码不同的部分引起的(尽管github源仍然会重现它)。事实证明,在程序的不同部分中,我在不删除文件的先前内容的情况下写入文件(我认为touch是这样做的),然后从文件中检索到的数据导致内存泄漏和各种分配问题。

答案 1 :(得分:0)

使用%lf打印双打,而不是您使用的错字%fl