繁体   English   中英

fgets中的向量类型

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM