【发布时间】:2010-11-16 00:29:40
【问题描述】:
C 中是否有一个函数可以读取带有自定义分隔符(如 '\n')的文件?
例如:我有:
我确实在文件中写了\n来举例说明是LF(换行,'\n',0x0A)
this is the firstline\n this is the second line\n
我希望文件按部分读取并将其拆分为两个字符串:
this is the firstline\n
this is the second line\n
我知道 fgets 我最多可以读取多个字符,但不能以任何模式读取。在 C++ 中我知道有一种方法,但在 C 中怎么做呢?
我再举一个例子:
我正在读取一个文件 ABC.txt
abc\n
def\n
ghi\n
使用以下代码:
FILE* fp = fopen("ABC.txt", "rt");
const int lineSz = 300;
char line[lineSz];
char* res = fgets(line, lineSz, fp); // the res is filled with abc\ndef\nghi\n
fclose(fp);
我预计 fgets 必须在 abc 上停止\n
但是res里面填的是:abc\ndef\nghi\n
已解决:问题是我在 WindowsXP 中使用 Notepad++(我使用的那个 我不知道它是否发生在其他窗口上)以不同的方式保存了文件 编码。
fgets 上的换行符在您键入时需要 CRLF 而不仅仅是 CR 在记事本++中输入
我打开了 Windows 记事本,它工作 fgets 读取字符串 在第二个示例中最多为 abc\n。
【问题讨论】:
-
\n是指实际的换行符,还是字符反斜杠和 n?它不是标准的 C,但 POSIX 2008 具有 GNUgetdelim函数,可以满足您的需求。 -
fgets准确读取一行,到第一个\n字符。它唯一的限制是保留缓冲区的大小。 -
你确定吗?我做了一个程序,它读取了文本的\n,我再检查一遍。
-
@okami:您介意提供另一个没有类似 C 转义序列的示例吗?只需使用普通文本。这会让你的问题更清楚。
-
是的,它是用 fgets 写入缓冲区的:-/