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)
。这将使循环效率更高。
相关文章:
- 来自 Android 应用程序内部的 boost 类型的 boost::wrapexcept<boost::system::system_error> 的未捕获异常
- 嵌套模板函数采用 2 个具有相同内部类型的容器
- 返回给定 SEXP 的子集,而无需知道实际的内部数据类型
- 如何理解c++中在命名空间内部定义的枚举类型enum
- 在变量名后声明带有 () 的非内部类型与不使用变量名的行为不同。即 std::map<int,char>x(); - 这是怎么回事?
- C++:在"try"外部创建的类型会导致错误,但在内部不会
- 如何在QTScript中将QLIST内部的QMAP注册为元素类型
- 如何通过从变量中获取类型来访问内部 typedef
- 是一个被认为是不同类型的班级内部的正向声明
- 如何从对象内部的 typedef 获取模板参数类型
- 如何使用 C 的内部 C++ 类类型?
- 具有模板类型内部功能的不同操作的NOExcept
- 在C++中,当两个向量类型不同时,如何将值存储到向量内部的向量中
- 如何将负数转换为更广泛的类型在内部工作
- 如何为模板的内部类型专用化类
- 从函数内部推断函数返回类型
- C 名称当前类型内部模板
- 从内部类型参数推断外部类型
- 从 lambda 内部返回 C++11 中的 lambda 类型(平面映射函数)
- 在 CUDA 中使用内部类型转换的奇怪错误