首先,我知道这个问题非常接近这个话题,但是这个问题的措辞非常糟糕,我什至不确定它是重复的,而且没有显示代码,所以我认为应该正确地询问它。
我正在尝试逐行读取文件,并且我需要将一行特别存储在variable
。我已经成功地使用轻松地做到了这一点fgets
,尽管如此要读取的行的大小 and 行数在文件中仍然未知.
我需要一种方法来正确分配内存variable
无论线的大小如何,使用 C 而不是 C++.
到目前为止我的代码看起来像这样:
allowedMemory = malloc(sizeof(char[1501])); // Checks if enough memory
if (NULL == allowedMemory)
{
fprintf(stderr, "Not enough memory. \n");
exit(1);
}
else
char* res;
res = allowedMemory;
while(fgets(res, 1500, file)) // Iterate until end of file
{
if (res == theLineIWant) // Using strcmp instead of ==
return res;
}
这段代码的问题是它根本不具有适应性。我正在寻找一种方法来分配足够的内存res
这样我就不会错过任何数据line
.
我在想这样的事情:
while ( lineContainingKChar != LineContainingK+1Char) // meaning that the line has not been fully read
// And using strcmp instead of ==
realloc(lineContainingKChar, K + 100) // Adding memory
但我需要迭代两个FILE
对象来填充这些变量,这不会很有效。
任何有关如何实施此解决方案的提示或有关如何以更简单的方式实施的建议将不胜感激。
编辑:似乎使用getline()
是最好的方法,因为该函数会分配自己所需的内存并在需要时释放它。尽管如此,我不认为它是 100% 可移植的,因为尽管我已经包含了它,但我仍然无法使用它<stdio.h>
。不过有待验证,因为我的问题通常位于键盘和计算机之间。在那之前,我仍然对不使用 POSIX 兼容 C 的解决方案持开放态度。