fonction de la bibliotheque string.h
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

fonction de la bibliotheque string.h



  1. #1
    invite9c4bf030

    fonction de la bibliotheque string.h


    ------

    bonjour t le monde ; svp je veux une correction à mon programme il se compile mais il ne s’exécute pas correctement (je sais pas comment utiliser les balise c pr ça j'ai poster mon programme comme ça ; merci d'avance

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    typedef struct CDTheque
    {
        char artiste[20];
        char album[20];
        int annee;
        int stock;
    
    }CD;
    
    char saisi(char *nom,char *code)
    {
        char *s;
        s = malloc (sizeof (*s) * (strlen (nom) + 1));
    
        printf("donner votre nom");
        getchar();
        gets(nom);
        printf("donner votre code");
        gets(code);
    
       strcat(s,nom);
       strcat(s,"_");
       strcat(s,code);
       strcat(s,".txt");
    
       return s;
    
    }
    
    
    int main()
    {
        char Nom[30],Code[30];
    
        saisi(Nom,Code);
    
    
        return 0;
    }[/SIZE]

    -----
    Dernière modification par Jack ; 02/12/2012 à 19h21. Motif: ajout des balises code

  2. #2
    kwariz

    Re : fonction de la bibliotheque string.h

    Bonjour,

    utiliser les balises code est très simple :
    tu commences par taper [ pour signaler un début de balise, tu tapes le nom de la balise, en l'occurence code, et tu fermes la balise avec un ] ;
    tu insères ton code en vérifiant qu'il est bien indenté
    tu finis en tapant un [/, qui signifie balise de fin, suivi du nom de la balise (cpmme tu fermes code) tu tapes code, suivi d'un ].
    Éventuellement tu prends le temps de lire l'aide du forum, mais je sais c'est long et ça prends du temps ...

    Pour ton problème, essaye de suivre à la main l'évolution du contenu de tes variables en vérifiant la taille allouée et la taille de ce que tu y écris ...

  3. #3
    Jack
    Modérateur

    Re : fonction de la bibliotheque string.h

    Citation Envoyé par kwariz Voir le message
    Bonjour,

    utiliser les balises code est très simple :
    tu commences par taper [ pour signaler un début de balise, tu tapes le nom de la balise, en l'occurence code, et tu fermes la balise avec un ] ;
    tu insères ton code en vérifiant qu'il est bien indenté
    tu finis en tapant un [/, qui signifie balise de fin, suivi du nom de la balise (cpmme tu fermes code) tu tapes code, suivi d'un ].
    Éventuellement tu prends le temps de lire l'aide du forum, mais je sais c'est long et ça prends du temps ...
    J'ajoute que l'on peut sélectionner l'éditeur avancé dans lequel il existe le bouton "#" qui va ajouter les balises automatiquement.

    A+

  4. #4
    Jack
    Modérateur

    Re : fonction de la bibliotheque string.h

    je ne comprends pas que la compilation se passe correctement, vu que ta fonction doit retourner un "char" alors que tu retournes un "char*"

    A+

  5. A voir en vidéo sur Futura
  6. #5
    bzh_nicolas

    Re : fonction de la bibliotheque string.h

    Citation Envoyé par hinda7 Voir le message
    bonjour t le monde ; svp je veux une correction à mon programme il se compile mais il ne s’exécute pas correctement (je sais pas comment utiliser les balise c pr ça j'ai poster mon programme comme ça ; merci d'avance

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    typedef struct CDTheque
    {
        char artiste[20];
        char album[20];
        int annee;
        int stock;
    
    }CD;
    
    char saisi(char *nom,char *code)
    {
        char *s;
        s = malloc (sizeof (*s) * (strlen (nom) + 1));
    
        printf("donner votre nom");
        getchar();
        gets(nom);
        printf("donner votre code");
        gets(code);
    
       strcat(s,nom);
       strcat(s,"_");
       strcat(s,code);
       strcat(s,".txt");
    
       return s;
    
    }
    
    
    int main()
    {
        char Nom[30],Code[30];
    
        saisi(Nom,Code);
    
    
        return 0;
    }[/SIZE]
    Je vois déjà un gros risque de bufferoveflow dans ton programme.
    Dans la fonction "saisi" :
    - Déjà tu ne vérifies jamais la taille des chaine saisies
    - Regarde la taille que tu alloues pour ta variable s et la taille potentielle des éléments que tu y place (en tout cas du premier)...

    En plus des problèmes précédemment cité, j'ajouterais que tu alloues de la mémoire mais que tu ne la désalloue jamais (=fuite mémoire).

  7. #6
    Chanur

    Re : fonction de la bibliotheque string.h

    Bonjour,

    En même temps, comme votre programme ne fait rien, on peut considérer qu'il le fait très bien ...
    Je veux dire qu'il n'y a aucune sortie : ni écriture de fichier ni affichage. Donc il est normal qu'il ne se passe rien.
    A la rigueur, vue l'allocation douteuse, le programme a le droit de planter sauvagement avec un "memory fault, core dump" ...

    Par ailleurs (en plus des erreurs déjà signalées) :
    - malloc alloue une plage mémoire sans l'initialiser. le premier strcat va donc copier nom à partir du premier zéro binaire après le début de la chaîne allouée. Autant dire qu'on ne sais pas du tout où.
    - A quoi rime le getchar qui lit, sans le stocker, le premier caractère saisi, de sorte que dans la chaîne "Nom" on trouvera les caractères saisis à partir du deuxième ?
    - il est fortement recommandé d'utiliser fgets plutôt que gets. Ça permet de spécifier une taille maximale à la saisie. Sinon, l'utilisateur a le droit de dépasser la taille du buffer utilisé, quelle que soit cette taille.
    - il serait plus joli de laisser un espace à la fin de l'affichage des invites de saisie.
    - la structure CD n'est pas utilisé et ne semble pas avoir de rapport avec le reste

    A+
    Dernière modification par Chanur ; 03/12/2012 à 14h19.
    Ce qui se conçoit bien s'énonce clairement ; et les mots pour le dire arrivent aisément.

Discussions similaires

  1. Instructions string
    Par invitee6712f08 dans le forum Programmation et langages, Algorithmique
    Réponses: 3
    Dernier message: 14/05/2011, 10h55
  2. envoyer un string via RS232
    Par invite4b36df62 dans le forum Électronique
    Réponses: 28
    Dernier message: 16/05/2009, 15h32
  3. probleme String
    Par ABN84 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 25/05/2007, 12h24
  4. String c
    Par invitea121f130 dans le forum Logiciel - Software - Open Source
    Réponses: 7
    Dernier message: 13/03/2007, 05h11
  5. cosmic string
    Par invite73114de8 dans le forum Archives
    Réponses: 11
    Dernier message: 01/02/2006, 12h37