1
resposta

duvida

Vamos dizer que eu queria juntar a parte de verificar se pegou a posicao de memoria certa do arquivo e a funcao fopen tudo em uma funcao só, pra quando eu precisar puchar um file de um arquivo eu fazer da seguinte forma:

obs: "esta forma esta errada, é só um exemplo do que quero fazer":

void verificaFILE(FILE *f){
    if(f == 0){
        printf("arquivo indisponivel ou inexistente\n");
        exit(1);
    }
}

void abriArquivo(FILE *f, char arquivo[], char comoLer[]){
    f = fopen(arquivo, comoLer);
    verificaFILE(f);
}
int main(){

    FILE *f;
    abriArquivo(f, "mapa.txt", "r");

este codigo exemplifica bem oq quero fazer, mas o problema dele, acredito eu, é q a string passada nos parametros de abriArquivo, que dps é repassada para os parametros de fopen nao é lida da forma certa pelo compilador por se tratar de uma posicao de memoria, como eu posso fazer isso funcionar?

1 resposta

Olá, Vitor!

Pelo que entendi, você deseja juntar a verificação do arquivo e a função fopen em uma única função. No exemplo que você mostrou, você criou a função abriArquivo que recebe um ponteiro para FILE e duas strings, uma para o nome do arquivo e outra para o modo de leitura. No entanto, você está tendo problemas ao passar as strings como parâmetros.

Uma solução para isso é passar o ponteiro para FILE por referência, em vez de por valor. Dessa forma, a função abriArquivo poderá modificar o ponteiro e você poderá verificar se o arquivo foi aberto corretamente. Veja como ficaria o código:

void abriArquivo(FILE **f, char arquivo[], char comoLer[]) {
    *f = fopen(arquivo, comoLer);
    verificaFILE(*f);
}

int main() {
    FILE *f;
    abriArquivo(&f, "mapa.txt", "r");
    // Resto do seu código
}

Note que agora a função abriArquivo recebe um ponteiro para ponteiro para FILE, FILE **f. Dentro da função, utilizamos o operador * para acessar o ponteiro original e modificá-lo. Assim, quando você chamar a função abriArquivo passando o endereço de f (&f), qualquer modificação feita em *f será refletida na variável f da função main.

Espero que isso resolva o seu problema! Se tiver mais alguma dúvida, é só me dizer.

Espero ter ajudado e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software