有以下程序(提示,程序中fseek(fp,-2L*sizeof(int),SEEK_END);语句的作用是使位置指针从文件末尾向前移2*sizeof(int)字节):
#include <stdio.h>
main()
FILE *fp; int i, a[4]=l,2,3,4,b;
fp=fopen("data.dat","wb");
for(i=0;i<4;i++) fwrite(&a[i],sizeof(int),1,fp);
fclose(fp);
fp=fopen("data.dar","rb");
fseek(fp,-2L*sizeof(int),SEEK END);
fread(&b,sizeof(int),1,fp);/*从文件中读取sizeof(int)字节的数据到变量b中 */
fclose(fp);
printf("%d\n",b);
执行后输出结果是( )。
A.2
B.1
C.4
D.3
参考答案:D
解析: 函数fopen(const char *filename,const char *mode)的功能足以mode指定的模式打开filename指定的磁盘文件;fclose(FILE *fp)的功能是关闭文件指针fp指向的文件;函数fscanf(FILE*fp,const char*format[,address,--])的功能是根据format中的格式从fp指向的文件中读取数据,并存入到相应的address指向的变量中。函数fprintf(FILE*fp,const char*format[,argument,--])的功能是把 argument列表中的表达式值写到fp所指向的文件中;函数fwrite(void *ptr,int size,int n,FILE *fp)的功能足把ptr指向的缓冲区中的 size×n个字节写到文件指针fp指向的文件中。本题中首先定义了一个文件指针fp,然后通过函数fopen以可wb的方式打开文件 data.dat,直接通过一个for循环,每循环一次调用函数fwrite将数组中的元素a[i]的值写进fp所指的文件中,该循环共循环4次,循环完后fp所指文件的内容为123,然后通过fclose函数关闭fp所指文件。接着通过函数fopen以rb的方式打开文件data.dat,通过fseek函数让指针fp从文件末尾向前移动两个血型大小字节,再通过函数fread从fp所指的文件畔,读取一个int型大小的数据到变量b中,故此时b的值为3,因此最后输出b的值为3,所以,4个选项中选项D符合题意。