Jump to content
Fórum Script Brasil
  • 0

Duvida - Estruturas e parametros para funções em C


Cassio Ferrazzo

Question

Estou com uma dúvida não sei se isso é possivel de ser realizado em C.

estou trabalhando com 4 estruturas diferentes.

preciso gravar estas estruturas em arquivo.

gostaria de fazer uma unica função para realizar a gravação nestes arquivos(cadas estrutura vai gravar em um arquivo diferente)

não sei se posso declarar uma função:

void GravaArquivo(struct *STR, FILE *pa);

passando como parametro a estrutura e o arquivo que vou salvar.

é possivel fazer isso desta forma?

gostaria de opniões e também algumas idéias caso não seja possivel.

Obrigado

Edited by Cassio Ferrazzo
Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 0
Estou com uma dúvida não sei se isso é possivel de ser realizado em C.

estou trabalhando com 4 estruturas diferentes.

preciso gravar estas estruturas em arquivo.

gostaria de fazer uma unica função para realizar a gravação nestes arquivos(cadas estrutura vai gravar em um arquivo diferente)

não sei se posso declarar uma função:

void GravaArquivo(struct *STR, FILE *pa);

passando como parametro a estrutura e o arquivo que vou salvar.

é possivel fazer isso desta forma?

gostaria de opniões e também algumas idéias caso não seja possivel.

Obrigado

Sim é possível, eu colocaria o numero de bytes que tem a estrutura caso seja no modo binário, mas existe a função fwrite que grava bytes em um arquivo binário.

size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );

onde

buffer é um ponteiro para a variavel que se deseja ler,

num_bytes é o numeros de bytes que se deseja gravar

count quantos items do tipo buffer se deseja gravar,

fp o arquivo que vai ser gravado.

por exemplo você quer gravar um int

fwrite(&i, sizeof(int), 1, fp);// grava um int no arquivo passado

lembrando que o arquivo esteja aberto em modo binario

ai você quer fazer uma função que recebe um ponteiro para sua estrutura e outro para o arquivo.

Abre o arquivo com fopen modo binario escrita

E grave a estrutura usando fwrite

meu protótipo é esse, lembrando que estou sem o compilador

void GravaArquivos(void *str, FILE *fp, int num_bytes, const char *arq) //str declarado como void para receber qualquer tipo de dados.

implemente-a.

Edited by Dan Oliveira
Link to comment
Share on other sites

  • 0
Estou com uma dúvida não sei se isso é possivel de ser realizado em C.

estou trabalhando com 4 estruturas diferentes.

preciso gravar estas estruturas em arquivo.

gostaria de fazer uma unica função para realizar a gravação nestes arquivos(cadas estrutura vai gravar em um arquivo diferente)

não sei se posso declarar uma função:

void GravaArquivo(struct *STR, FILE *pa);

passando como parametro a estrutura e o arquivo que vou salvar.

é possivel fazer isso desta forma?

gostaria de opniões e também algumas idéias caso não seja possivel.

Obrigado

Sim é possível, eu colocaria o numero de bytes que tem a estrutura caso seja no modo binário, mas existe a função fwrite que grava bytes em um arquivo binário.

unsigned fwrite(void *buffer, int num_bytes, int count, FILE *fp);

onde

buffer é um ponteiro para a variavel que se deseja ler,

num_bytes é o numeros de bytes que se deseja gravar

count quantos items do tipo buffer se deseja gravar,

fp o arquivo que vai ser gravado.

por exemplo você quer gravar um int

fwrite(&i, sizeof(int), 1, fp);// grava um int no arquivo passado

lembrando que o arquivo esteja aberto em modo binario

ai você quer fazer uma função que recebe um ponteiro para sua estrutura e outro para o arquivo.

Abre o arquivo com fopen modo binario escrita

E grave a estrutura usando fwrite

meu protótipo é esse, lembrando que estou sem o compilador

void GravaArquivos(void *str, FILE *fp, int num_bytes, const char *arq) //str declarado como void para receber qualquer tipo de dados.

implemente-a.

Certo mas pelo fato de declarar como "void *str" não vai ser necessário fazer um cast dentro da função de gravação em algum momento?

Link to comment
Share on other sites

  • 0
Estou com uma dúvida não sei se isso é possivel de ser realizado em C.

estou trabalhando com 4 estruturas diferentes.

preciso gravar estas estruturas em arquivo.

gostaria de fazer uma unica função para realizar a gravação nestes arquivos(cadas estrutura vai gravar em um arquivo diferente)

não sei se posso declarar uma função:

void GravaArquivo(struct *STR, FILE *pa);

passando como parametro a estrutura e o arquivo que vou salvar.

é possivel fazer isso desta forma?

gostaria de opniões e também algumas idéias caso não seja possivel.

Obrigado

Sim é possível, eu colocaria o numero de bytes que tem a estrutura caso seja no modo binário, mas existe a função fwrite que grava bytes em um arquivo binário.

unsigned fwrite(void *buffer, int num_bytes, int count, FILE *fp);

onde

buffer é um ponteiro para a variavel que se deseja ler,

num_bytes é o numeros de bytes que se deseja gravar

count quantos items do tipo buffer se deseja gravar,

fp o arquivo que vai ser gravado.

por exemplo você quer gravar um int

fwrite(&i, sizeof(int), 1, fp);// grava um int no arquivo passado

lembrando que o arquivo esteja aberto em modo binario

ai você quer fazer uma função que recebe um ponteiro para sua estrutura e outro para o arquivo.

Abre o arquivo com fopen modo binario escrita

E grave a estrutura usando fwrite

meu protótipo é esse, lembrando que estou sem o compilador

void GravaArquivos(void *str, FILE *fp, int num_bytes, const char *arq) //str declarado como void para receber qualquer tipo de dados.

implemente-a.

Certo mas pelo fato de declarar como "void *str" não vai ser necessário fazer um cast dentro da função de gravação em algum momento?

A função fwrite não precisa cast, por isso o ponteiro não precisa de der especificado o tipo, isso a torna mais generica.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...