提问人:Marlon Müller 提问时间:11/13/2023 最后编辑:chux - Reinstate MonicaMarlon Müller 更新时间:11/14/2023 访问量:98
如何让 fgets 不会停止阅读 \n?
How to let fgets not stop reading at \n?
问:
我想从文件中读取固定长度的 s。因此,我使用 ,但停止阅读。char
fgets
fgets
"\n"
我怎样才能读出第一个 N,即使其中一个是换行符?char
我尝试在文档中搜索其他功能,但没有找到。
答:
4赞
chqrlie
11/13/2023
#1
要从流中读取固定数量的字节,您应该使用:fread
#include <stdio.h>
size_t fread(void * restrict ptr, size_t size, size_t nmemb,
FILE * restrict stream);
fread
尝试读取每个字节的元素,并返回成功读取的元素数。它在文件末尾返回。nmemb
size
0
此外,请确保文件以二进制形式打开,以防止在旧系统上转换可能干扰字节计数的行结束序列。"rb"
评论
1赞
chux - Reinstate Monica
11/13/2023
此外,流应以二进制模式打开,以免转换行尾等。
1赞
gulpr
11/13/2023
#2
要确保字符串以 null 字符结尾,您需要编写自己的函数
char *freads(char *buff, size_t len, FILE *fi)
{
size_t readBytes = fread(buff, 1, len - 1, fi);
if(!readBytes) return NULL;
buff[readBytes] = 0;
return buff;
}
评论
0赞
Sir Jo Black
11/16/2023
我建议在所有情况下都以零终止,即使没有读取任何内容并且返回 null!
0赞
gulpr
11/16/2023
@SirJoBlack 否,如果返回 NULL,则代码不会到达那里。
0赞
Sir Jo Black
11/16/2023
如果设置缓冲区,则可以避免最终使用不正确的数据,并获得在两种情况下缓冲区将为空,另一方面,很明显,测试函数返回的 NULL 值,调用方应该知道缓冲区无效,因为读取文件中没有更多数据。反正你说的没问题!
上一个:无法在 C 语言中关闭线路缓冲
下一个:清除 fgets 缓冲区
评论