Comment utiliser un fichier comme paramètre pour une fonction dans C?

J’apprends le C et je viens d’un fond de Java. J’apprécierais si je pouvais avoir des conseils. Voici mon code:

#include  #include  #include  #include  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); } 

Lorsque j’essaie de comstackr, j’obtiens cette erreur:

 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 

Des pensées? Merci pour votre temps.

Vous n’avez pas de prototype de fonction pour votre fonction. En outre, write est déclaré dans unistd.h , c’est pourquoi vous obtenez la première erreur. Essayez de renommer cela en my_write ou quelque chose. Vous n’avez vraiment besoin que de la bibliothèque stdio.h , à moins que vous ne souhaitiez utiliser d’autres fonctions ultérieurement. J’ai ajouté une vérification d’erreur pour fopen ainsi que return 0; qui devrait conclure chaque fonction principale en C.

Voici ce que je ferais:

 #include  #include  #include  #include  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; } 

Voir man 2 write sur linux.

 #include  ssize_t write(int fd, const void *buf, size_t count); 

C’est le prototype. Vous devez passer un descripteur de fichier entier et non un pointeur de fichier. Si vous voulez votre propre fonction Changez le nom en foo_write ou quelque chose

Il existe déjà une fonction système appelée write . Il suffit de nommer votre fonction quelque chose d’autre, de mettre une déclaration de fonction avant de l’utiliser, et ça ira.