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 :

Déclaration de tableau de char


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 103
    Par défaut Déclaration de tableau de char
    bonjour

    Pourquoi dans cette déclaration de tableau de char (que j'ai trouvé dans 1 livre) il n'y a pas le '\0' a la fin ?



    Déclaration du livre :

    char voy[6] = {'a', 'e', 'i', 'o', 'u', 'y'}

    Déclaration du tuto :

    chaine1[7];
    chaine1[0] = 't';
    chaine1[1] = 'a';
    chaine1[2] = 'g';
    chaine1[3] = 'a';
    chaine1[4] = 'd';
    chaine1[5] = 'a';
    chaine1[6] = '\0';

  2. #2
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Si je veux déclarer un tableau de 4 int et l'initialiser avec les valeurs t[0] = 1, t[1] = 3, t[2] = 4 et t[3] = 7, j'écrirais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int d[4] = {1, 3, 4, 7};
    Le 4 entre les crochets étant facultatif. Pourquoi je n'ai pas 2, ou 5 ou n'importe quel autre chiffre dans mon tableau ? Parce que je ne veux tout simplement pas de ce chiffre dans mon tableau !

    Dans le livre, on créé un tableau (voy) de 6 char initialisé avec les valeurs 'a', 'e', 'i', 'o', 'u', 'y'. Pourquoi on n'a pas 'c', 'x', ou '\0' ou n'importe quel autre caractère dans voy ? Même réponse que dans l'exemple plus haut. Le dernier caractère de voy n'étant cependant pas le caractère '\0', on ne pourra pas passer voy à des fonctions comme strlen, strcmp, printf, etc. car toutes ces fonctions supposent qu'une chaîne de caractères est terminée par '\0'. En C, on dit que voy est un tableau de char, mais pas une chaîne de caractères.

    Dans le tuto, l'objectif était bel et bien de créer une chaîne de caractères, que l'on pourra passer à des fonctions comme strlen, strcmp, printf, etc. C'est pourquoi on a mis un '\0' en dernier caractère.

    N'oublie pas que le '\0' est un caractère qu'on met "conventionnellement", en C, à la fin d'une suite de caractères pour en faire une "chaîne de caractères".

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 103
    Par défaut
    Merci,

    1/ Mais pourquoi une chaine de caractère est pas un tableau ?

    2/ Dans quel cas on utilise un tableau et dans quel cas on utilise une chaine avec des exemples si possible

  4. #4
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    1/ C'est tout le contraire de ce que j'ai dit. Une chaîne de caractères est un tableau de char, mais tout tableau de char n'est pas forcément une chaîne de caractère. Qu'est-ce qu'une chaîne de caractères a de plus par rapport à un "simple" tableau de char ? Le '\0' à la fin, RIEN D'AUTRE.

    2/
    a) On PEUT utiliser un simple tableau de char pour créer un "ensemble" par exemple ("ensemble", comme on l'entend en mathématiques). Par exemple le tableau voy de ton exemple, pour un mathématicien, c'est l'ensemble des voyelles de l'alphabet latin. Ultérieurement, pour tester si x est une voyelle, on regarde s'il est présent dans le tableau. T'as compris ? Mais puisqu'une chaîne est également un tableau, t'aurais également pu utiliser une chaîne dans ce cas au lieu d'un simple tableau.

    b) On DOIT utiliser une chaîne de caractères lorsqu'on veut pouvoir traiter ce tableau avec les fonctions de "manipulation de chaînes" de la bibliothèque standard. J'ai déjà expliqué la raison. Par exemple, strlen, qui calcule la longueur d'une chaîne, compte le nombre de caractères présents dans la chaîne en s'arrêtant dès qu'elle rencontre le '\0'. Si tu passes un tableau qui ne contient pas de '\0' à strlen, tu peux t'attendre à de merveilleuses surprises.

    Je répète : En C, "une chaîne de caractère" signifie strictement "un tableau de caractères avec un '\0' en dernier caractère".

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 103
    Par défaut
    Merci c'est plus clair..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    char voy[6] = {'a', 'e', 'i', 'o', 'u', 'y'} ;
     
     
    char chaine[] = { 'S' , 'A' , 'L' , 'U' , 'T' , '\0' } ; // ou encore
    char chaine[] = "SALUT" ;
    Si j'ai compris...

    Dans le char voy sert a stocker des lettres dans un tableau sans vouloir les affichés (printf) ou calculer sa longueur ect...

    Et dans les 2 char chaine servent aussi a stocké des lettres dans un tableau mais pour cette fois-ci pour les affichés, calculés ect...

    PS : j'ai pas très bien compris le but d'utiliser un tableau char... pour une chaine c'est ok mais pas pour un tableau

  6. #6
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Excellent . T'as bien compris. Par contre je ne comprends pas ce que tu veux dire dans le PS .

    EDIT : J'ai peut-être compris. Voulais-tu dire : "quel est l'intérêt de préférer un simple tableau de char à une chaîne de caractères alors que c'est follement compliqué et que l'usage est très limité ?" ? Franchement, juste pour économiser un caractère ! (un caractère occupe un "octet" en mémoire).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. decalage à gauche sur une tres grand tableau de char
    Par petitours dans le forum C++Builder
    Réponses: 10
    Dernier message: 14/07/2005, 22h40
  2. retrouver unesuite de caractères dans un tableau de char
    Par petitours dans le forum C++Builder
    Réponses: 17
    Dernier message: 12/07/2005, 23h43
  3. Ansistring et tableau de char
    Par rabbi_jaccob dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/12/2004, 11h51
  4. Adresse d'un tableau de char
    Par Trap D dans le forum C
    Réponses: 8
    Dernier message: 23/12/2003, 12h02
  5. Réponses: 4
    Dernier message: 10/10/2003, 18h04

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