Come si usa un FILE come parametro per una funzione in C?

 C Programming >> Programmazione C >  >> Tags >> File
Come si usa un FILE come parametro per una funzione in C?


Sto imparando C e vengo da un background Java. Apprezzerei se potessi avere una guida. Ecco il mio codice:


#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main(void)
{
char *str = "test text\n";
FILE *fp;
fp = fopen("test.txt", "a");
write(fp, str);
}
void write(FILE *fp, char *str)
{
fprintf(fp, "%s", str);
}

Quando provo a compilare, ottengo questo errore:


xxxx.c: In function ‘main’:
xxxx.c:18: warning: passing argument 1 of ‘write’ makes integer from pointer without a cast
/usr/include/unistd.h:363: note: expected ‘int’ but argument is of type ‘struct FILE *’
xxxx.c:18: error: too few arguments to function ‘write’
xxxx.c: At top level:
xxxx.c:21: error: conflicting types for ‘write’
/usr/include/unistd.h:363: note: previous declaration of ‘write’ was here

qualche idea? Grazie per il tuo tempo.


Risposte:


Ti manca un prototipo di funzione per la tua funzione. Inoltre, write è dichiarato in unistd.h quindi ecco perché ottieni il primo errore. Prova a rinominarlo in my_write o qualcosa. Hai davvero solo bisogno del stdio.h libreria anche come nota a margine, a meno che non si preveda di utilizzare altre funzioni in seguito. Ho aggiunto il controllo degli errori per fopen così come return 0; che dovrebbe concludere ogni funzione principale in C.


Ecco cosa farei:


#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
void my_write(FILE *fp, char *str)
{
fprintf(fp, "%s", str);
}
int main(void)
{
char *str = "test text\n";
FILE *fp;
fp = fopen("test.txt", "a");
if (fp == NULL)
{
printf("Couldn't open file\n");
return 1;
}
my_write(fp, str);
fclose(fp);
return 0;
}