有以下程序(提示,程序中fseek(fp,-2L*sizeof(int),SEEK_END);语句的作用是使位置指针从文件末尾向前移2*sizeof(int)字节): #include <stdio.h> main() { FILE

admin2010-01-10  23

问题 有以下程序(提示,程序中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,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

答案8

解析 函数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的值写进fp所指的文件中,该循环共循环4次,循环完后fp所指文件的内容为123,然后通过fclose函数关闭fp所指文件。接着通过函数fopen以rb的方式打开文件data.dat,通过fseek函数让指针fp从文件末尾向前移动两个血型大小字节,再通过函数fread从fp所指的文件畔,读取一个int型大小的数据到变量b中,故此时b的值为3,因此最后输出b的值为3,所以,4个选项中选项D符合题意。
转载请注明原文地址:https://kaotiyun.com/show/3UWp777K
0

最新回复(0)