gpt4 book ai didi

c++ - 打开文件并使用 fseek 获取文件大小 - C++

转载 作者:太空宇宙 更新时间:2023-11-04 14:02:45 27 4
gpt4 key购买 nike

我正在用 C++ 编写一个程序,这个程序应该是一个词法分析器来制作编译器。因此,我制作了 header “AnalisadorLexical.h”,其中我将所有函数和所有其他内容定义为指向文件的指针...,“AnalisadorLexical.cpp”,其中我定义了函数的逻辑和 main.cpp。

在 main.cpp 中,我要求用户输入要分析的文件的名称和写入结果的名称。这是在循环内完成的,同时用户输入许多文件进行分析。当用户输入字体文件的名称和最终文件的名称时,我使用函数 fopen 两次打开第一个文件并在第二个文件上写入。在此之后,我调用构造函数来获取第一个文件的大小,以创建一个 vector ,我将在其中存储文件的标记。我的问题是当我使用 fseek 获取文件的大小时。程序执行失败,不知如何是好。

遵循他们的代码。

主要.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::AnalisadorLexico(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 - 构造函数的定义

`(...)

公共(public):

//Construtor de classe 

AnalisadorLexico(FILE *f1, FILE *f2);

(...)`

谢谢你们的帮助。

最佳答案

您需要检查fopen 的返回值。如果出现错误,您需要采取一些理智的措施。另外,为什么 c1 和 c2 不是 std::string

关于c++ - 打开文件并使用 fseek 获取文件大小 - C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18477962/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com