【发布时间】: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”是不同的值。