c - 在 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))
创建一个随机字符?
解决方案
他们不是。当fseek()
用于跳过部分然后写入时,文件中有“洞”,操作系统会用零填充。
推荐阅读
- http - 如何将 https 链接更改为 http heroku
- javascript - 为什么文档有 getElementById 方法,即使它不是从 Element 继承的?
- css - 如何在 React Native(FlatList)中删除我的卡之间的间距?
- typescript - 当我在终端中执行纱线构建(它调用 tsc)时出现错误并且在终端中执行 tsc 时没有错误?
- image-processing - Mask RCNN 只预测几个类别中的一种类别
- ios - 解析 GraphQL failure() 导致 Swift
- ios - 如何创建返回 NSLayoutConstraint 的函数
- postgresql - 我可以为 Tilda 中的表添加索引以提高性能吗?
- jquery - 在 WP 中使用 jQuery 从外部源更新内容
- windows - 禁用 Control+Shift,不包括与这些键相关的所有快捷键