要从文件中读取行,需要使用getline()
和fgets()
POSIX函数(忽略已可怕的gets()
)。通常,getline()
比fgets()
优先,因为它根据需要分配行缓冲区。
我的问题是:那不是很危险吗?如果有人出于偶然或出于恶意目的创建了一个100GB的文件,但其中没有'\n'
字节怎么办–会使我的getline()
调用分配大量的内存吗?
最佳答案
是的,您所描述的是一个合理的风险。然而,
getline()
尝试执行此操作本质上比编写自己的代码来使用fgets()
进行操作具有更高的风险;和setrlimit()
限制其可以保留的(虚拟)内存总量来减轻风险。这可能导致失败,而不是成功分配足够的内存来干扰系统的其余部分。 我认为,最好的总体做法是首先编写不需要以全行(一次)输入的代码,但是这种方法有其自身的复杂性。