如何从C中的文件中删除最后7个字节?

时间:2019-09-30 15:13:29

标签: c loops

我想精确地生成125000000字节或10 ^ 9位随机数,但最终却得到125000007字节的数据。如何从文件中切除最后7个字节?

我尝试过

int truncate(const char *path, off_t length);
truncate("/tmp/F.bin", 7);

这是工作代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>


union
{
    unsigned int uc;
    unsigned char byte[4];
} rand_data;

int main(){

        FILE * fp;

        fp = fopen("/tmp/F.bin", "wb");
        unsigned int size = 0;

        srand(501459);
        while(size <= 125000000) {
            rand_data.uc = rand();
            fprintf(fp, "%x%x%x%x", rand_data.byte[3], rand_data.byte[2], rand_data.byte[1], rand_data.byte[0]);
            size = ftell(fp);
        }
        printf("%d", size);
        fclose(fp);
        return 0;
    }

2 个答案:

答案 0 :(得分:0)

%x似乎是此作业的错误格式说明符,因为它可能写入多个字节。

尝试改用%c

我也不知道您为什么使用ftell。我会去的:

size += 4;

相反。

也许是这样的循环:

    while(size < 4*31250000) {
        rand_data.uc = rand();
        fputc(rand_data.byte[3], fp);
        fputc(rand_data.byte[2], fp);
        fputc(rand_data.byte[1], fp);
        fputc(rand_data.byte[0], fp);
        size += 4;
    }

答案 1 :(得分:0)

解决方案是将我的条件更改为大小<125000000,并根据建议将%x更改为%02x。 :)

相关问题