计算机二级C语言考试试题!关于文件的,解析理解不了麻烦大家帮忙解释下,谢谢了!
首先,题目要求选择错误的,
fwrite的用法如下:
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
ptr:要写入数据的首地址
size:每次写入的数据大小
nmemb:写入次数
stream:要写入的文件指针
答案A:for循环写入10
次,每次写1个sizeof(struct st)
的大小,首地址每次都是x,相当于把数组的第一个元素写入10次,故错误
答案B:从x的地址取数据,写一次10*sizeof(struct st)
的大小,刚好把整个数组写入,故正确
答案C:从x的地址取数据,写十次sizeof(struct st)
的大小,也刚好把整个数组写入,故正确
答案D:for循环写入10
次,每次写1个sizeof(struct st)
的大小,每次写入的首地址是数组的元素递增,把整个数组写入,故正确
不敢答了,答了也没采纳。
这题只要详细了解下fwrite()函数的用法就可以了,供参考:https://baike.baidu.com/item/fwrite/10942398?fr=aladdin
fwrite函数用法
size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);
返回值:返回实际写入的数据块数目
1、buffer:是一个指针,对fwrite来说,是要获取数据的地址
2、size:要写入内容的单字节数
3、count:要进行写入size字节的数据项的个数
4、stream:目标文件指针
5、返回实际写入的数据项个数count
B 是以数组x[10] 10个元素作为一个数据块写入文件里,数组名 x 即是数组的地址,所以fwrite()第一个参数是 x。
C 是以一个结构体元素为数据块,共写10次,写入文件里。
D 是是数值x[i] 一个元素作为数据块写入文件里,所以是循环10次写入,每次一个元素,所以fwrite()第一个参数是 &x[i]。
A 错误原因是 fwrite()函数第一个参数是 x 是错误的,应该和D一样是&x[i]。
//fwrite函数原型:
size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
参数1:待写入的数据的首地址
参数2:一次写入的长度(大小)
参数3:写几次(写多少个参数2那样的大小)
参数4:写入到哪个文件流指针
题目中:
1.要把结构体类型的数组写进去,可以像选项B那样,每次写整个结构体数组的大小,写1次就够了
2.可以像选项C那样,一次写一个数组元素的大小,写10次
3.选项D:类似选项C,注意它与A的区别,D每次调用fwrite函数的时候,参数1的地址随i变化,选项A则没有,A是把数组第一个元素写了10遍
C选项容易跟A选项混淆,主要是C选项是一次调用这个函数,参数3为10自动往后取10个这个大小
希望采纳!!谢谢
写入内容是值传递,所以不用传引用,每次循环取出一个结构体变量,所以大小就是一个结构体的大小,也是一个数据项
这篇文章:计算机二级C语言笔记 也许有你想要的答案,你可以看看