在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.
填充为零
我正在分析我老师写的一个函数。它创建一个文件并用“随机内容”填充它。正如描述所说:
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.