【c语言关于文件的题目】两道选择题,纠结了。请大神指点迷津

题目

若要用fopen函数打开一个新的二进制文件,该文件要既能读也能写,则文件方式字符串应是( )
A."ab+"
B."wb+"
C."rb+"
D."ab"

正确
B
我的答案 C
我的教材上说,rb+是用读写方式打开一个二进制文件,我觉得很符合提议。
wb+是用读写方式创建一个二进制文件...搞不懂题目中“打开一个新的二进制文件”的意思了。

还有

题目

使用fopen()以文本方式打开或建立可读可写文件,要求:若指定的文件不存在,则新建一个,并使文件指针指向其开头,若指定的文件存在,打开它,将文件指针指向其结尾。正确的"文件使用方式"描述是
A."r+"
B."w+"
C."a+"
D."a"
正确答案 B
w+不是用读写方式创建一个文件么?创建的意思是不是从无到有?那是不是就是w+的意思一定是只能创建而不能打开已经存在的文件??
正是出于这样的考虑,我算了c 读写的方式打开/创建一个文件。。。
好纠结。请大神指点迷津啊,给出详解哟

第1个回答  推荐于2018-04-16
第一道题:因为是新的二进制文件,也就是说原来没有,所以要创建;
至于第二题:我觉得应该是选择C.“a+”,选择B的话,可读可写打开,没有就创建,有的话清空内容了,不符合题目要求追问

a+的读写是不是读和追加呀?

追答

a+可读写追加方式打开,追加就是将指针指向文件尾部

FILE * fopen(const char * path,const char * mode);

r 打开只读文件, 该文件必须存在。
r+ 打开可读写的文件, 该文件必须存在。
w 打开只写文件, 若文件存在则文件长度清为0,
即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件, 若文件存在则文件长度清为零,
即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在, 则会建立该文件, 如果文件存在, 写入的数据会被加到文件尾,
即文件原先的内容会被保留。
a+ 以附加方式打开可读写的文件。若文件不存在, 则会建立该文件, 如果文件存在, 写入的数据会被加到文件尾后,
即文件原先的内容会被保留。
上述的形态字符串都可以再加一个b字符, 如rb、w+b或ab+等组合, 加入b 字符用来告诉函数库打开的文件为二进制文件,
而非纯文字文件。不过在POSIX系统,
包含Linux都会忽略该字符。由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,
此文件权限也会参考umask值。

本回答被提问者采纳
第2个回答  2015-01-05
第一题:你忽略了“要用fopen函数打开一个新的二进制文件”中的“新”字,新就是原来没有这个文件,需要创建。
第二题:w+不是肯定创建一个文件,若文件不存在,会创建一个新的,根据题意“若指定的文件不存在,则新建一个”,只能选B,因为其他都必须保证文件已存在。追问

a+也可以创建啊,a+不是用读写的方式打开、创建一个文件么?
a+的写是不是指追加的写呀?
w+也可以打开已经存在的文件吗?
谢谢哦

本回答被网友采纳
第3个回答  2015-01-05
rb+方式要求被打开的文件必须存在(这与新文件要求不符)。