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 :

const char *


Sujet :

C

Vue hybride

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

    Informations forums :
    Inscription : Mai 2010
    Messages : 280
    Par défaut const char *
    Bonjour,
    Alors voilà mon problème :
    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
    #include <getopt.h>
    #include <stdio.h>
    #include <stdlib.h>
    /* Nom du programme. */
    const char* program_name;
    /* Envoie les informations sur l'utilisation de la commande vers STREAM
    (typiquement stdout ou stderr) et quitte le programme avec EXIT_CODE.
    Ne retourne jamais. */
    void print_usage (FILE* stream, int exit_code)
    {
    fprintf (stream, "Utilisation : %s options [fichierentrée ...]\n",
    program_name);
    fprintf (stream,
    " -h --help Affiche ce message.\n"
    " -o --output filename Redirige la sortie vers un fichier.\n"
    " -v --verbose Affiche des messages détaillés.\n");
    exit (exit_code);
    }
    L'auteur de cet exemple en 5 eme ligne déclare une constante mais ne lui donne pas une valeur ?! comprends pas...
    encore ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void fonction( const char * pointeur )
    je peux comprendre. La fonction reçoit un pointeur vers une valeur qu'elle ne doit pas modifier ok...
    Mais dans l'exemple précédent...
    Quelqu'un peut il m'éclairer s'il vous plait ? Merci

  2. #2
    Expert confirmé
    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
    Par défaut
    Tel qu'il est, on a program_name == NULL.
    Ce programme est sans doute le squelette d'un exemple, un programme incomplet.
    Il manque (ou il y aura quelque part) un program_name =....

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    280
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 280
    Par défaut
    Bonjour,

    non c'est un exemple complet le code entier est disponible p21 du livre disponible ici. en effet dans le main ce qui est pointé par program_name prendra comme valeur la chaîne argv[0] (le nom du programme). Ce qui a fait me poser des questions c'est que const pour moi empêchait précisement la modification du contenu de l'emplacement mémoire pointée par program_name en fait il interdit la modification mais ce qui est pointé n'est pas la chaîne mais le premier caractère de cette chaîne. Ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const char* program_name;
    n'interdit pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    program_name = argv[0];
    mais interdit :
    autant que :
    Voilà j'ai un peu avancé hier soir sur mon problème mais cela reste encore un peu flou, des précisions seront bienvenue...

    @diogene j'ai vu ta publication je vais y jeter un oeuil peut-être que ça répondra à mes questions...
    Merci d'avoir répondu.

  4. #4
    Expert confirmé
    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
    Par défaut
    non c'est un exemple complet
    Non, il manquait justement le main() dans ce que tu as posté. Et d'ailleurs, j'avais pris la précaution de dire :
    Il manque (ou il y aura quelque part) un program_name =....
    const char* program_name; déclare un pointeur non constant sur un char ou un tableau de char qui ne sont pas modifiable(s). char const * program_name; également.

    Par contre
    -char* const program_name;déclare un pointeur constant sur un char ou un tableau de char qui sont modifiable(s) (donc un pointeur qui doit être initialisé à la création, le contenu du char ou du tableau de char pouvant être lui obtenu par affectation)

    -const char* const program_name;déclare un pointeur constant sur un char ou un tableau de char qui ne sont pas modifiable(s).

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    280
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 280
    Par défaut
    Citation:
    non c'est un exemple complet

    Non, il manquait justement le main() dans ce que tu as posté. Et d'ailleurs, j'avais pris la précaution de dire :
    quand je parlais d'exemple complet je parlais de celui du livre pas de ce que j'avais posté puisque tu me disais :
    Ce programme est sans doute le squelette d'un exemple, un programme incomplet.
    Je m'excuse j'aurais dû dire un programme complet cela aurait été plus clair.

    const char* program_name; déclare un pointeur non constant sur un char ou un tableau de char qui ne sont pas modifiable(s). char const * program_name; également.
    oui c'est ce que j'ai compris en effet... Pourtant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    program_name = argv[0];
    modifie bien le tableau de char pointé par program_name puisqu'il y place le nom du programme... d'où mon questionnement...

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Citation Envoyé par PyNub Voir le message
    Pourtant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    program_name = argv[0];
    modifie bien le tableau de char pointé par program_name puisqu'il y place le nom du programme... d'où mon questionnement...
    Ben non, ça modifie seulement le pointeur, le faisant pointer sur la même chaîne pointée par argv[0].
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 28/10/2005, 12h11
  2. [Appli Console]Pb exec command ac fct system(const char *)
    Par Le_magicien999 dans le forum MFC
    Réponses: 2
    Dernier message: 16/08/2005, 16h07
  3. Conversion CString en const char*
    Par LRobi dans le forum MFC
    Réponses: 8
    Dernier message: 19/07/2005, 12h12
  4. Réponses: 13
    Dernier message: 06/03/2005, 15h21
  5. Pb d'nitialisation d'un const char*
    Par davkick dans le forum C++
    Réponses: 9
    Dernier message: 09/12/2004, 16h27

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