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.