找到一条线末端位置的有效方法

Nan*_*nik 0 c++ ifstream end-of-line

我正在使用C++ ifstream和文本文件.我正在寻找每行结尾的位置,因为我需要n从行尾读取字符.

目前,我正在读取每个字节并测试它是否对应于Unix换行符(LF).

不幸的是,输入通常是长文本,我的方法并不快.

有没有更快的方法?

Eva*_*ran 6

如果你正在寻找原始速度,我会记忆映射文件并使用类似的东西strchr找到换行符;

p = strchr(line_start, '\n');
Run Code Online (Sandbox Code Playgroud)

那么只要p不是NULL或内存区域中的第一个字符,你就可以p[-1]用来在换行符之前读取字符.

注意:如果文件可能包含'\0'字符,那么您应该使用memchr.实际上,这可能是合乎需要的,因为它允许您指定缓冲区的大小(内存区域).

  • +1如果找不到换行符,您可能需要检查文件中是否有NUL字符,或使用`strnchr`确保不超出文件末尾 (2认同)