首页 > 解决方案 > 在 C 中创建一个随机字符

问题描述

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

文件的内容是随机位置的 10% 的随机 [AZ] 字符,其余用零填充(不是“0”,ascii 代码为零)。

这是功能:

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循环每次都会设置一个随机文件位置指示器,然后生成一个字符。我想,也许它fseek()是添加 ascii 零的函数,但是当我尝试调用它一次时,使用常量大小 5(不管常量大小是多少),它只是创建了一个空文件,没有任何 ascii零。

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

标签: clinuxunixasciiposix

解决方案


他们不是。当fseek()用于跳过部分然后写入时,文件中有“洞”,操作系统会用零填充。


推荐阅读