在C中创建一个随机字符

Creating a random character in C

我正在分析我老师写的一个函数。它创建一个文件并用“随机内容”填充它。正如描述所说:

Content of the file is 10% of random [A-Z] chars at random positions, the rest is filled with zeros (not "0", ascii code zero).

这是函数:

void make_file(char *name, ssize_t size, mode_t perms, int percent){
    FILE* s1;
    int i;
    umask(~perms&0777);
    if((s1=fopen(name,"w+"))==NULL)ERR("fopen");
    for(i=0;i<(size*percent)/100;i++){
            if(fseek(s1,rand()%size,SEEK_SET)) ERR("fseek");
            fprintf(s1,"%c",'A'+(i%('Z'-'A'+1)));
    }
    if(fclose(s1))ERR("fclose");
}

我不明白的是 - 何时将 ascii 零添加到文件中?

据我了解,for循环每次都会设置一个随机的文件位置指示符,然后生成一个字符。我想,也许是添加 ascii 零的 fseek() 函数,但是当我尝试调用它一次时,它的大小为 5(无论大小是多少),它只是创建了一个空的文件,没有任何 ascii 零。

编辑:感谢您对 fseek() 和 ascii 零的回答。我很抱歉将此添加为编辑: 我关于此代码的另一个问题是 - 这部分代码如何:'A'+(i%('Z'-'A'+1)) 创建一个随机字符?

他们不是。当 fseek() 用于跳过部分然后写入时,文件中有“漏洞”,这些漏洞被 OS.

填充为零