【问题标题】:Creating a random character in C在 C 中创建一个随机字符
【发布时间】:2021-02-21 16:48:53
【问题描述】:

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

文件内容是随机位置的 10% 的随机 [A-Z] 字符,其余用零填充(不是“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 零的回答。很抱歉将其添加为编辑: 我对这段代码的另一个问题是 - 这部分代码是如何:'A'+(i%('Z'-'A'+1)) 创建一个随机字符?

【问题讨论】:

  • 这段代码没有添加任何零,除了那些隐式放置在写入位置之间的零。
  • 你说“我想,也许是 fseek() 函数添加了 ascii 零”,但描述说“不是“0”,ascii 代码为零”。 ASCII 0 和“0”是不同的值。

标签: c linux unix ascii posix


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2014-10-26
    • 2022-09-27
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 2010-09-28
    • 1970-01-01
    • 2018-04-14
    相关资源
    最近更新 更多