![]() |
1
7
您可以将每个字符读入缓冲区并检查换行符(
|
![]() |
2
4
您需要创建一个缓冲区,其长度是支持的最长行的两倍,并且需要跟踪缓冲区的状态。 基本上,每次调用新行时,都会从当前缓冲区位置扫描,寻找行尾标记。如果你找到了,很好,这是你的底线。更新缓冲区指针并返回。 如果达到maxlength,则返回截断的行并将状态更改为discard。下一次调用时,您需要丢弃行尾,然后进入正常读取状态。 如果读到的内容已结束,则需要读入另一个maxline字符,如果读到底部,则包装到缓冲区的开头(即,可能需要进行两次读取调用),然后继续扫描。 以上所有这些都假设您可以设置最大行长度。如果不能,那么就必须使用动态内存,并担心缓冲区malloc失败时会发生什么。此外,您还需要始终检查读取结果,以防在读取缓冲区时碰到文件末尾。 |
![]() |
3
1
不幸的是,read函数并不真正适合这种类型的输入。假设这是来自面试/家庭作业/练习的某种人工需求,您可以尝试通过将文件分块读取并将其拆分到换行符上,以某种方式在调用之间保持状态,来模拟基于行的输入。如果仔细记录函数的用法,就可以使用静态位置指示器。 |
![]() |
4
1
如果你需要准确阅读一行(而不是超过)使用
除非您真的需要避免越界(这有时很重要,如果您希望另一个进程/程序继承文件描述符并能够从您中断的地方读取),否则我建议您使用
|
![]() |
5
0
这是一个很好的问题,但是只允许read函数没有帮助!P 循环读取调用以获取固定数量的字节,并搜索“\n”字符,然后返回字符串的一部分(直至返回“\n”),并存储其余部分(除“\n”)以前置到下一个字符文件块。 使用动态内存。 缓冲区的大小越大,使用的读取调用就越少(这是一个系统调用,因此不便宜,但现在有抢占内核)。 … 或者简单地确定一个最大的行长度,并使用fgets,如果你需要快速… |
![]() |
6
0
嗯,它会从终端逐行读取。 有些选择是:
|
![]() |
7
0
如果以文本模式打开文件,则在读取文件时,Windows“\r\n”将自动转换为“\n”。 如果您在unix上,可以使用非标准 一 gcc'getline()'函数。 一 这个 getline() 函数是posix 2008中的标准。 |
![]() |
MaPo · Linux,设置锁定ICMP_过滤器选项 6 月前 |
![]() |
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 6 月前 |
![]() |
Bobby · 复合字面值总是左值吗? 7 月前 |
![]() |
9-Pin · C: 嵌套结构的堆栈内存分配 7 月前 |