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 :

Tableau de chaine de caractères


Sujet :

C

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Haïti

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 29
    Points : 38
    Points
    38
    Par défaut Tableau de chaine de caractères
    Salut à tous,
    Rien qu'en passant à ces mots:
    "Un tableau regroupe des elements de meme type tandis qu'une structure a la possibilité de regrouper des elements de types différents".

    Ainsi, ai-je vraiment l'habitude de declarer des tableaux de types int, long, float, double.........

    Mais pas de TYPE CHAR
    Je veux pas montrer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
             char alexis[10]="Alexis";
    Mais plutot un tableau ou l'on peut enregistrer plus d'une chaine de caractère.
    Donc un tableau ou chaque case ne contiendra plus un caractere mais plutot une chaine

    J'ai trouvé le moyen d'initialiser un tel tableau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    /*les inclusions
    **les defines etc...*/
    char * alexis[10]={"alexis","je",/*Jusqu'au remplissage des 10 éléments*/}
    Jusque là c'est un jeu d'enfant(et mon sourire va s'atténuer)
    Je veux lire ces informations du clavier.

    Et j'ai testé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    char * alexis[10];
    int i;
    for(i=0;i<10;i++)
    {
        scanf("%s",alexis[i]);
        /*Nettoyage du buffer*/
        fflush(stdin);
           /*Je sais que l'utilisation de cette function
    est indecise. Ce n'est que pour le test*
    }
    Merci déjà pour votre aide

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Pour insérer du code, on utilise les balises [code]mon code[/code] (bouton ) et non [quote]mon code[/quote]

    La ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char * alexis[10]={"alexis","je",/*Jusqu'au remplissage des 10 éléments*/}
    (qui serait mieux avec un const devant ) fait pointer tes 10 pointeurs alexis[i] vers les cases mémoires contenant les différentes chaînes constantes "alexis", "je"...
    Tel quel, tes cases alexis[i] pointent donc vers un espace réservé et valide.

    Mais lorsque tu déclares char * alexis[10]; les pointeur ne sont pas initialisés. C'est comme si tu déclarais 10 pointeurs char *str.
    Il te faut d'abord allouer chaque case avec malloc()/calloc() avant de pouvoir l'utiliser, puis libérer cet espace avec free() une fois terminé.

    Concernant l'utilisation peu recommandée de la fonction scanf(), je t'invite à lire ce tutoriel.

    Ainsi que la FAQ Pourquoi ne faut-il pas utiliser fflush(stdin) pour vider le buffer clavier ? pour ce qui est de la ligne fflush(stdin);

  3. #3
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Dans le cas de ces deux codes, alexis définit un tableau de 10 pointeurs sur char, c'est à dire qu'il nous donne la possibilité de stocker 10 adresses de char.
    Dans le cas char * alexis[10]={"alexis","je",/*Jusqu'au remplissage des 10 éléments*/} le tableau est initialisé par l'adresse du premier char d'un tableau (dans ce cas non modifiable) contenant la chaine "alexis" et par celle du premier char d'un tableau contenant la chaine "je", etc.

    Dans le cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    char * alexis[10];
    int i;
    for(i=0;i<10;i++)
    {
    scanf("%s",alexis[i]);
    ....
    }
    alexis n'est pas initialisé et lors de l'appel au scanf() la lecture se fait en mettant le résultat n'importe où. Il faut qu'il soit initialisé avec les adresses de début de tableaux suffisamment grand pour contenir les chaines de caractères.
    Un exemple :
    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
    char * p;
    char tab[10];
    char * alexis[10];
     
    scanf("%s",p); // erreur à l'exécution
     
    scanf("%s",tab); // bon (si l'entrée ne dépasse pas 9 caractères)
     
    p = tab;
    scanf("%s",p); // bon (si l'entrée ne dépasse pas 9 caractères)
     
    p = &tab[0]; // équivalent au précédent
    scanf("%s",p); // bon (si l'entrée ne dépasse pas 9 caractères)
     
    alexis[0] = tab;
    alexis[1] = malloc(10);
    scanf("%s",alexis[0]); // bon (si l'entrée ne dépasse pas 9 caractères)
    scanf("%s",alexis[1]); // bon (si l'entrée ne dépasse pas 9 caractères)
    ...
    free(alexis[1]);
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

Discussions similaires

  1. Réponses: 10
    Dernier message: 31/05/2007, 15h10
  2. tableau de chaine de caractères
    Par psgman113 dans le forum C
    Réponses: 15
    Dernier message: 22/01/2007, 18h52
  3. Pointeur, tableau et chaines de caractères.
    Par rouliane dans le forum C++
    Réponses: 8
    Dernier message: 19/12/2006, 20h27
  4. Réponses: 15
    Dernier message: 04/11/2006, 10h02
  5. [C] tableau de chaines de caractères
    Par kitsune dans le forum C
    Réponses: 18
    Dernier message: 01/04/2006, 18h18

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