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éclarer une string via un pointeur constant


Sujet :

C

  1. #1
    Membre du Club Avatar de Redgard
    Homme Profil pro
    x
    Inscrit en
    Décembre 2014
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : x

    Informations forums :
    Inscription : Décembre 2014
    Messages : 90
    Points : 60
    Points
    60
    Par défaut déclarer une string via un pointeur constant
    Bonjour,


    En cherchant sur internet pour tout ce qui est déclaration de string en C, je suis tombé sur ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const char *s3 = "Developpez";
    SOURCE: http://nicolasj.developpez.com/articles/libc/string/

    Or j'aimerais savoir si c'est vraiment conseillé?

    Parce que j'ai compris qu'il déclare le pointeur constant, pour éviter les résultats aléatoires lié à la déclaration directe de variable par un pointeur. Mais j'aimerais savoir si ça n'a pas un contre coût.


    Merci d'avance,
    Red'

  2. #2
    Membre averti
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Points : 387
    Points
    387
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Redgard Voir le message
    Or j'aimerais savoir si c'est vraiment conseillé?

    Parce que j'ai compris qu'il déclare le pointeur constant, pour éviter les résultats aléatoires lié à la déclaration directe de variable par un pointeur. Mais j'aimerais savoir si ça n'a pas un contre coût.
    Merci d'avance,
    Red'
    Salut ; c'et conseillé oui si tu veux protéger la chaîne de modifications ;
    malgré tout la modification sera possible avec une instruction telle que : scanf("%s",s3);

    En gros c'est une bonne pratique pour des chaînes que tu souhaites voir rester constantes

  3. #3
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    Bonjour,

    Attention const char *s3 n'est un un pointeur constant, c'est un pointeur non constant sur des caractères constants.

    C'est plus que conseillé, car "Developpez" est en réalité un const char[11] et se servir de ce pointeur pour modifier des caractères produira un UB (Comportement Indéfini).
    D'ailleurs le langage C++ qui ajoute un peu de rigueur au C, oblige le mot const dans ce cas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    const char *s3 = "Developpez";
    s3[0] = 'X';              // Ne compile pas, tant mieux
    char *s4 = "Developpez";  // toléré en C pour des raisons historiques, mais Warning
    s4[9] = 'r';              // Compile, mais aura-t-on "Developper", un plantage ou autre chose?
    char s5[] = "Developpez"; // ok car le tableau s5[11] reçoit une copie du tableau "Developpez"
    s5[9] = 'r';              // Ok s5 est modifiable, mais attention à la taille du tableau ...
    strcat( s5 , "ez" );      // ... UB, aura-t-on "Developperez", un plantage ou autre chose?

Discussions similaires

  1. [Shellcode] Récupérer une string via "pop edi"
    Par homeostasie dans le forum x86 32-bits / 64-bits
    Réponses: 14
    Dernier message: 19/06/2009, 13h20
  2. Creer une propriété ou déclarer une string
    Par freerider74 dans le forum VB.NET
    Réponses: 1
    Dernier message: 09/02/2009, 11h36
  3. Réponses: 6
    Dernier message: 12/09/2007, 15h58
  4. Modifier une chaîne d'un pointeur constant
    Par oranoutan dans le forum C
    Réponses: 7
    Dernier message: 25/05/2007, 16h32

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