打开文件并使用fseek获取文件大小-C++
opening files and use of fseek to get size of file - C++
我正在用c++做一个程序,这个程序应该是一个词法分析器来编译。因此,我制作了标题"AnalisadorLexical.h",其中我将所有函数和所有其他东西定义为指向文件的指针。。。,在"AnalysadorLexical.cpp"中,我定义了函数的逻辑和main.cpp.
在main.cpp上,我要求用户输入要分析的文件的名称和写结果的名称。这是在一个循环中完成的,同时用户输入许多文件进行分析。当用户输入字体文件的名称和最终文件的名称时,我使用fopen功能两次打开第一个文件并在第二个文件上写入。在这之后,我调用构造函数来获取第一个文件的大小,以创建一个向量,在那里我将存储文件的令牌。我的问题a是当我使用fseek来获取文件的大小时。程序执行失败,我不知道该怎么办。
遵循他们的代码。
main.cpp:
`int main(){
char *c1, *c2;
c1 = new char[30];
c2 = new char[30];
FILE *f1;
FILE *f2;
cout<<"Arquivo de entrada:"<<endl;
while(cin>>c1){
cin>>c2;
f1 = fopen(c1, "r");
f2 = fopen(c2, "w");
AnalisadorLexico al(f1, f2);
al.analiseLexica();
fclose(f1);
fclose(f2);
}
返回0;}`
AnalisadorLexico.cpp-构造函数:
`AnalisadorLexico::Analisador Lexico(FILE*f1,FILE*f2){
//Aloca os arquivos
fp = f1;//arquivo sendo lido (de entrada)
fs = f2;//arquivo de saída
//tamanho do arquivo
fseek(fp, 0L, SEEK_END);
tk_Size = ftell(fp);
//vetor de tokens
tk_vet = new token[tk_Size];
//inicializa com 0
tk_count = 0;
monta_tabelaPR();
montaSb_vet();
}(…)`
AnalisadorLexico.h-构造函数的定义
`(…)
公用:
//Construtor de classe
AnalisadorLexico(FILE *f1, FILE *f2);
(…)`
谢谢你们的帮助。
您需要检查fopen
的返回值。如果有错误,你需要做一些理智的事情。还有,为什么c1和c2不是std::string
?
我不会费心去查找文件的大小。然而,我也不会将它粘贴到手动分配的内存中。相反,我会把它读成std::vector<char>
,然后继续我实际上必须做的工作:
std::vector<char> v;
{
std::ifstream in(c1);
if (!in) {
throw std::runtime_error("failed to open '" + std::string(c1) "' for reading");
}
v.insert(std::istreambuf_iterator<char>(in), std::istreambuf_iterator<char>());
}
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 使用指针从C++中的数组中获取最大值
- 如何获取std::result_of函数的返回类型
- 如何在openssl-ecc中获取十六进制格式的私钥
- 使用Unreal C++获取VR耳机的世界位置/方向
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 从C字符串中获取奇怪的字符串长度
- 为什么我的for循环不能正确获取argv
- 从python中调用C++函数并获取返回值
- 如何获取一个数字的前3位
- 获取字符串的长度并将其分配给数组
- 无法获取菜单选择以运行函数.C++
- 数组长度,为什么从命令行获取时不能使用它?
- Boost Spirit,获取迭代器内部语义动作
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- 具有默认值的引用获取函数
- xmake总是报告:错误:无法获取cxx的程序,为什么
- 打开文件并使用fseek获取文件大小-C++