【C语言文件精选题】
C语言文件精选题
- 一、易错题
- 1.1fopen的正确格式
- 1.2 fopen失败时返回值
- 1.3 fopen打开新文件读写
- 1.4 fread函数
- 1.5 fread第一个是位置
- 1.6 fscanf 很想scanf
- 1. **fopen函数**
- 2. **fread函数**
- 3. **fscanf函数**
- 1.7 fgetc的打开方式
- 1.8 fputc的返回值
- 1.9 fwrite第三个位置是个数count
- 1.10 read 函数
- 1.11
一、易错题
1.1fopen的正确格式
在C语言中,fopen
函数的第一个参数是文件路径字符串,字符串需用双引号包裹,且路径中的反斜杠\
需转义为\\
。
- A、B:无双引号包裹,不符合字符串格式,错误。
- C:虽有双引号,但
\user
中的\
未转义,错误。 - D:使用双引号包裹,且路径中
\
转义为\\
,格式正确。
答案:D
1.2 fopen失败时返回值
在C语言中,fopen
函数执行出错时,返回值为NULL
,而NULL
在C语言中通常被宏定义为0
。分析选项:
- A:地址值是打开成功时返回的文件指针,错误。
- B:
0
对应NULL
,符合fopen
出错返回值,正确。 - C:
1
无此含义,错误。 - D:
EOF
用于标识文件结束,与fopen
错误返回无关,错误。
答案:B
1.3 fopen打开新文件读写
分析C语言中fopen
的文件模式:
- A “ab+”:用于二进制文件的追加读写,适合在已有文件后追加内容,非常规新建读写场景。
- B “wb+”:
w
表示无文件则新建,b
指定二进制,+
支持读写,完全满足新建二进制文件且读写的需求。 - C “rb+”:
r
要求文件必须存在,无法新建文件,不符合条件。 - D “ab”:仅用于二进制文件的追加写,不支持读,不符合要求。
答案:B
1.4 fread函数
在C语言中,fread(buffer, size, count, fp)
函数的参数含义如下:
buffer
:是一个指针,指向用于存储读取数据的内存地址,即读入数据的存放位置。size
:每个数据项的字节数。count
:读取数据项的总数。fp
:文件指针,指向操作的文件。
分析选项:
- A:
count
代表读入数据项总数,而非buffer
,错误。 - B:文件指针是
fp
,不是buffer
,错误。 - C:
buffer
是指针,指向读入数据的存放地址,正确。 - D:
buffer
是指针(指向存储区),并非存储区本身,错误。
答案:C
1.5 fread第一个是位置
分析fread
函数参数要求:其第一个参数需为存储数据的地址(指针)。
- A:
&a[i]
取地址,循环读30次,每次读1个结构体,正确。 - B:
a+i
是数组元素地址,虽循环步长为2(逻辑可能冗余,但语法合法),仍符合fread
参数要求,正确。 - C:
a
是数组首地址,一次性读30个结构体,符合fread
用法,正确。 - D:
a[i]
是结构体变量本身,未使用&
取地址,不满足fread
第一个参数需为地址的要求,错误。
答案:D
1.6 fscanf 很想scanf
1. fopen函数
- 参数:
- 第一个参数为文件路径字符串,需用双引号包裹,路径中反斜杠
\
需转义为\\
(如"c:\\user\\file.txt"
)。 - 第二个参数为文件打开模式(如
"r"
读文本、"wb+"
新建二进制读写)。
- 第一个参数为文件路径字符串,需用双引号包裹,路径中反斜杠
- 返回值:成功返回文件指针,失败返回
NULL
(即0
)。
2. fread函数
- 调用形式:
fread(buffer, size, count, fp)
。 - 参数含义:
buffer
:指针,指向存储读取数据的内存地址。size
:单个数据项的字节数。count
:读取数据项的数量。fp
:文件指针。
3. fscanf函数
- 调用形式:
fscanf(文件指针, 格式字符串, 输入表列)
。 - 功能:从指定文件中按
格式字符串
读取数据,存入输入表列
(需为变量地址,如&变量
)。
1.7 fgetc的打开方式
fgetc
函数用于从文件读取字符,文件必须具备读取权限。分析选项:
- A:“只写”模式无法读取,错误。
- B:“追加”模式(如
"a"
",a+"
)下,文件允许读取操作。 - C:“读”(
"r"
)或“读写”("r+"
等)模式直接支持读取。 - D:“追加”(B)和“读/读写”(C)均满足读取条件,正确。
答案:D
1.8 fputc的返回值
在C语言中,fputc
函数输出字符成功时,返回值为输出的字符本身;若失败,返回EOF
。分析选项:
- A:
EOF
是输出失败的返回值,错误。 - B、C:
1
和0
无此含义,错误。 - D:符合成功时返回输出字符的规则,正确。
答案:D
1.9 fwrite第三个位置是个数count
分析fwrite
函数参数:其需写入nmemb
个大小为size
的数据。
- A:
sizeof(struct st)
为单个元素大小,50
表示写入50个元素,正确。 - B:
50 * sizeof(struct st)
是总数据大小,1
表示写入1次完整数据(整体写入数组),正确。 - C:
25 * sizeof(struct st)
与25
的乘积为25×25×sizeof(struct st)
,无法匹配50个元素的总大小,无法正确写入全部数据,错误。 - D:循环50次,每次写入1个元素(
student+i
指向单个元素),正确。
答案:C
1.10 read 函数
在 UNIX/Linux 系统编程中,read
函数原型为 ssize_t read(int fd, void *buf, size_t count)
,参数依次为:
int fd
:文件描述符;void *buf
:存储读取数据的缓冲区(指针类型);size_t count
:读取的字节数。
分析选项:
- A:
read(int fd, char *buf, int count)
,参数类型和顺序均符合read
函数要求(int
与size_t
在实际使用中常可兼容)。 - B:
int *buf
与int fd
顺序错误,缓冲区应为指针且位置不对。 - C:
int count
与char *buf
顺序错误,不符合函数定义。 - D:参数顺序完全混乱,无正确性。
答案:A
1.11
C语言中 lseek
函数原型为 off_t lseek(int fd, off_t offset, int whence)
,参数依次为:
- 文件号(文件描述符
fd
); - 位移量(
offset
,移动的字节数); - 起始点(
whence
,取值如SEEK_SET
/SEEK_CUR
/SEEK_END
)。
对照选项:
- A:参数顺序错误,无此调用形式。
- B:
lseek(文件号, 位移量, 起始点)
,完全匹配函数原型参数顺序,正确。 - C:
起始点
与位移量
顺序颠倒,错误。 - D:参数逻辑与顺序均错误。
答案:B