[英]Vector type inside fgets
我有这个理论,我可以使用fseek和ftell获取文件大小,并建立一个动态数组作为缓冲区。 然后将缓冲区用于fgets()。 我目前无法提出一种方法。
我的理论是基于不知道第一个文件的大小(以字节为单位)。 因此,我不知道要建立多大的缓冲区。 如果文件超过2个演出该怎么办? 我希望能够构建一个可以更改并识别我放入SearchInFile()的文件大小的缓冲区。
这是我到目前为止的内容:
int SearchInFile(char *fname, char *fname2)
{
FILE *pFile, *pFile2;
int szFile, szFile2;
// Open first file
if( (fopen_s(&pFile, fname, "r")) != NULL )
{
return(-1);
}
// Open second file
if( (fopen_s(&pFile2, fname2, "r")) != NULL )
{
return(-1);
}
// Find file size
fseek(pFile, 0L, SEEK_END);
szFile = ftell(pFile);
// Readjust File Pointer
fseek(pFile, 0L, SEEK_SET);
std::vector <char> buff;
//char buff[szFile];
while(fgets(buff.push_back(), szFile, pFile))
{
}
任何想法或例子都很好。 我已经在网上搜索了最近几个小时。
向量可以增长,因此您不必事先知道大小。 以下四行可满足您的需求。
std::vector<char> buff;
int ch;
while ((ch = fgetc(pFile)) != EOF)
buff.push_back(ch);
fgetc
是读取单个字符的函数,比使用fgets
更简单。
如果您确实知道文件大小,则可以在循环之前调用buff.reserve(szFile)
。 这将使循环更有效率。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.