小白式的解答,肢解分析法(😀):
char 定义字符型变量
Field 用于获取特定栏目或档案的字段值及常用的环境变量值
descr description 描写,记述,形容
【255】可以放255个字符的数组
'\0' 终止符,空字符串
char field_descr[255]; 获取文件中定义的不同字段标记的参数值,最多可获取255个字符串数组
field-descr[0]='\0'; 当获取的字段参数值为空字符串时自动停止
【个人理解,如有不当,敬请谅解】
这就是读取一个文件中多行的参数,field-descr是因为每行开头部分是参数描述信息,然后空格之后是参数数据。
这段代码的含义是读取如下格式配置文件里的数据:
参数名1 参数值1
参数名2 参数值2
参数名3 参数值3
...
其中field_descr用来提取每行中的参数名并忽略,因此配置文件中参数的顺序有严格的要求,必须和代码中读取的顺序一致。
其实这些代码的含义是这样的:
/** other.c -- 解释代码的含义 */
/** 此方法用于读取配置文件 */
void readconf(conf, rcode)
char *conf; /* 控制文件名称 */
int *rcode; /* 返回码 */
{
char field_descr[255]; /* 控制文件的字段描述 */
FILE * fcon; /* 控制文件指针 */
/* 如果不能打开控制参数文件的话,将返回码设置为ERROR,表示函数调用出错 */
if((fcon = fopen(conf, "r")) == NULL) {
// 现有的程序不能打开 conf 参数文件
printf("Can not open parameter file <%s>, exitting program...\n", conf);
// 设置返回码为ERROR
*rcode = ERROR;
}
/* 读取控制文件参数 */
field_descr[0]= '\0';
fscanf(fcon, "%s %d", field_descr, &jday_start);
field_descr[0]= '\0';
fscanf(fcon, "%s %d", field_descr, &jday_end);
field_descr[0]= '\0';
fscanf(fcon, "%s %d", field_descr, &jday_display);
field_descr[0]= '\0';
fscanf(fcon, "%s %d", field_descr, &factor);
field_descr[0]= '\0';
fscanf(fcon, "%s %d", field_descr, &lin_offset);
field_descr[0]= '\0';
fscanf(fcon, "%s %d", field_descr, &nlines);
field_descr[0]= '\0';
fscanf(fcon, "%s %d", field_descr, &pix_offset);
field_descr[0] = '\0';
fscanf(fcon, "%s %d", field_descr, &npixels);
field_descr[0]= awcf[0] = '\0';
fscanf(fcon, "%s %d", field_descr, &awcf);
field_descr[0]= leafareaf[0] = '\0';
fscanf(fcon, "%s %d", field_descr, &leafareaf);
field_descr[0]= snowpackf[0] = '\0';
fscanf(fcon, "%s %d", field_descr, &snowpackf);
field_descr[0]= ncarbinf[0] = '\0';
fscanf(fcon, "%s %d", field_descr, &ncarbinf);
field_descr[0]= rowf[0] = '\0';
fscanf(fcon, "%s %d", field_descr, &rowf);
// .....
}
读取一个文件中的多行参数
字符串field_descr就是文件描述,每次读取一句文件描述和一个整数,读取的整数就是控制字符