IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Problème avec tableau de chaine de caractères


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 49
    Par défaut Problème avec tableau de chaine de caractères
    mon souci c'est d'ajouter des chaines dans mon tableau ( chaine de longueur variable ) .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
     
     char *saisie; 
        char * Tableau[10];
        int i = 0;
        int choix;
        int position1;
        int position2;
        int position;
     
        printf("Entrez le %d er  ",i+1);
        scanf("%s",&saisie);
        Tableau[i] = malloc(sizeof(saisie));
        Tableau[i] = saisie;
        while ( i <9 )
        {
        i = i+1;
        printf("Entrez le %d eme  ", i+1);
        scanf("%s",saisie);
        Tableau[i] = malloc(sizeof(saisie));
        Tableau[i] = saisie;
        }
    Voila je sais que c'est faux, je suis un novice en C, et je n'est pas bien compris comment on utilisait malloc.

    merci de votre aide

  2. #2
    Membre Expert
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 013
    Par défaut
    Wahou il y a un paquet d'erreurs. Je vais en citer quelques unes pour commencer:
    • Tu veux scanner un caractère avec scanf mais tu met %s, le format pour un charactère est %c
    • Tu veux stocker ce caractère sur un pointeur de caractère qui ne pointe sur rien! il faut avoir un emplacement mémoire valable. A savoir définir saisie en tant que char (et non char*) et faire scanf("%c", &saisie);
    • L'utilisation de scanf est très dangereuse. Mieux vaut utiliser fgets
    • Tu ne libères jamais la mémoire allouée
    • Pourquoi ne pas stocker directement tes caractères dans un tableau de caractères statique?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 49
    Par défaut
    Ma variable saisie est une chaine qui peux varier ( je demande 10 saisies ) elle peut contenir de 60 à 10 caracteres.

    Et à chaque fois que je saisie ma chaine, je veux la mettre dans mon tableau de chaine.

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Ta variable "saisie" est un pointeur qui pointe "dans le vide"... Tu ne peux rien mettre dedans tant qu'elle ne pointe pas, soit vers une zone de mémoire allouée par malloc, soit vers une variable (un tableau en l'occurence) local.

    Ensuite scanf("%s") est extrèmement dangereux puisqu'il n'y a aucun contrôle sur la longueur de la chaine lue. Utilise plutôt fgets.

    Enfin, sizeof saisie n'est pas la longueur de la chaine. C'est la taille d'un pointeur, c'est à dire d'une adresse mémoire.

  5. #5
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Et j'ajouterais que la copie de chaîne en C ne se fait pas avec = mais avec str(n)cpy.

    Le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Tableau[i] = malloc(sizeof(saisie));
    Tableau[i] = saisie;
    alloue un espace mémoire dont l'adresse est mise dans tableau[i] puis cette adresse est remplacée par celle de saisie.
    D'où plusieurs problèmes : Tableau[i] ne contient pas ce que tu crois et la mémoire alloué par malloc() n'est plus atteignable donc n'est pas libérable.

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par gl Voir le message
    Et j'ajouterais que la copie de chaîne en C ne se fait pas avec = mais avec str(n)cpy.
    J'éviterais de parler de strncpy() à un débutant, car c'est une source d'erreurs importantes...

    Je n'ai d'ailleurs jamais bien compris à quoi servait cette fonction...

    Préférer strncat().

Discussions similaires

  1. problème avec tableau de chaine de caractères
    Par soumti84 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 24/04/2009, 15h07
  2. Problème avec un tableau de chaines de caractères
    Par greg_h19 dans le forum Débuter
    Réponses: 1
    Dernier message: 22/12/2008, 16h31
  3. Réponses: 2
    Dernier message: 11/11/2008, 17h10
  4. Réponses: 3
    Dernier message: 20/02/2008, 23h36
  5. Problème avec comparaison de chaines de caractères
    Par nemesis00 dans le forum MATLAB
    Réponses: 4
    Dernier message: 01/01/2008, 19h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo