Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème fonction fputs

existe t-elle déjà dans stdio.h ?

Sujet résolu
    29 septembre 2021 à 12:07:27

    Hello,

    Je suis dans le chapitre "Lire et écrire dans des fichiers" de l'apprentissage C, à l'étape d'utiliser la fonction "fputs".

    Voici mon fichier main.c :

    #include <stdlib.h>
    #include <stdio.h>
    #include "header.h"
    
    int main()
    {
        FILE* fichier = NULL;  // On créer un pointeur de FILE appellé fichier et on initialise à NULL
        
        fichier = fopen("test.txt", "w");
        
        if (fichier != NULL)
        {
            printf("Le fichier test.txt est ouvert");
    
            // Ensuite on peut modifier le fichier...
            // fputc('A',fichier);
            fputs("J'ai modifié le fichié",fichier);
    
            // Et on ferme le fichier
            fclose(fichier);
        }
        else 
        {
            // on affiche un message d'erreur
            printf("Impossible d'ouvrir le ficher test.txt");
        }
    
    
        return 0;
    }

    Avec mon fichier header.h :

    // PROTOTYPES
    FILE* fopen(const char* nomDuFichier, const char* modeOuverture);
    int fclose(FILE* pointeurSurFichier);
    int fputc(int caractere, FILE* pointeurSurFichier);
    char* fputs(const char* chaine, FILE* pointeurSurFichier);
    int fgetc(FILE* pointeurDeFichier);
    char* fgets(char* chaine, int nbreDeCaracteresALire, FILE* pointeurSurFichier);
    Quand j'essaye d'utiliser la fonction "fputs" (dont le prototype est défini dans header.h) j'obtiens ce type d'erreur : 
    In file included from main.c:2:
    C:/Program Files/CodeBlocks/MinGW/x86_64-w64-mingw32/include/stdio.h:604:15: note: previous declaration of 'fputs' was here
       int __cdecl fputs(const char * __restrict__ _Str,FILE * __restrict__ _File);
                   ^~~~~
    De ce que je comprends, il existe déjà une fonction "fputs" dans la bibliothèque stdio.h.
    Ce que je ne comprend pas c'est pourquoi existe t-elle déjà (alors que dans le cours on nous demande de déclarer le prototype) et pourquoi elle renvoie un type int_cdecl alors que la fonction du cours renvoie un char* ? 
    Est-il conseillé que je modifie mon fichier stdio.h pour avoir la fonction "fputs" correspondante au cours ?
    Merci d'avance ;)

    -
    Edité par AntoineSp1 29 septembre 2021 à 12:15:12

    • Partager sur Facebook
    • Partager sur Twitter
      29 septembre 2021 à 12:53:00

      Hello aussi !

      AntoineSp1 a écrit:

      (alors que dans le cours on nous demande de déclarer le prototype)

      Tu es sûr d'avoir bien compris ce point ?

      Normalement :

      • Ces fonctions existent déjà, il ne faut pas les re-déclarer, juste mettre le #include qui va bien.
      • C'est pour une fonction qu'on a créé soi même que l'on déclare un prototype.

      Ou alors en cours vous avez redéfini les fonctions existantes de "stdio.h", et dans ce cas il ne faut surtout pas le #inclure.

      -
      Edité par robun 29 septembre 2021 à 12:54:46

      • Partager sur Facebook
      • Partager sur Twitter
        29 septembre 2021 à 13:06:36

        Salut Robun ! 

        Merci pour ta réponse, effectivement je viens de vérifier et il n'est dit nul part qu'il faut déclarer les prototypes vus en cours. Je suis allé un peu vite apparemment. 

        J'ai supprimé ma déclaration du prototype "fputs" et tout est rentré dans l'ordre, merci. 

        Néanmoins je m'interroge sur le type de la fonction qui est un "char*" dans le cours et est un "int_cdecl" dans stdio.h, pourquoi cette différence et qu'est ce que cela implique ? 

        Merci



        -
        Edité par AntoineSp1 29 septembre 2021 à 13:07:41

        • Partager sur Facebook
        • Partager sur Twitter
          29 septembre 2021 à 13:19:14

          fputs renvoi bien un entier de type int qui peut avoir la valeur EOF en cas d'échec.
          • Partager sur Facebook
          • Partager sur Twitter
          ...
            29 septembre 2021 à 13:38:00

            rouIoude a écrit:

            fputs renvoi bien un entier de type int qui peut avoir la valeur EOF en cas d'échec.

            Ok merci rouIoude !.



            • Partager sur Facebook
            • Partager sur Twitter

            Problème fonction fputs

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown