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 :

conversion string en char *


Sujet :

C

Vue hybride

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

    Informations forums :
    Inscription : Avril 2010
    Messages : 13
    Par défaut conversion string en char *
    Bonjour,

    J'aurais voulu savoir comment on convertissait une string en char*

    Merci d'avance

  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
    Je ne comprends pas ta question. Peux-tu donner un petit exemple ?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 13
    Par défaut
    Citation Envoyé par Melem Voir le message
    Je ne comprends pas ta question. Peux-tu donner un petit exemple ?
    j'aurais voulu une fonction du genre :

    char *ex = fonction("blabla");

  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
    j'aurais voulu une fonction du genre :

    char *ex = fonction("blabla");
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const char * ex = "blabla" ;

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 485
    Par défaut
    Citation Envoyé par nana38000 Voir le message
    j'aurais voulu une fonction du genre :

    char *ex = fonction("blabla");
    Citation Envoyé par diogene Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const char * ex = "blabla" ;
    Plus précisément, le type « string » n'existe pas en soi en C. Une chaîne de caractères est considérée comme un tableau de caractères, de taille non déterminée à l'avance (la chaîne est terminée par le caractère spécial '\0').

    Par conséquent, une chaîne est toujours transmise par l'intermédiaire d'un pointeur sur le premier caractère.

    Du côté du compilateur, une chaîne écrite entre guillemets est considérée comme une expression de type « char const * ». Il n'y a donc aucune conversion préalable à effectuer.

  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
    Citation Envoyé par Obsidian
    Une chaîne de caractères est considérée comme un tableau de caractères
    Là je suis d'accord. Tu aurais même pu mettre EST à la place de "est considérée comme", ça aurait été plus correct.

    de taille non déterminée à l'avance (la chaîne est terminée par le caractère spécial '\0').
    (...)
    Du côté du compilateur, une chaîne écrite entre guillemets est considérée comme une expression de type « char const * ».
    Ca par contre c'est très discutable : La taille d'un tableau peut être connue à tout moment. Les chaînes de caractères ne font pas exception. Et une chaîne entre guillemets est un tableau, pas un const char *. Ainsi, sizeof("poisson") vaut 8. Mais la conversion d'un tableau en const char * est, effectivement, implicite.

    Par conséquent, une chaîne est toujours transmise par l'intermédiaire d'un pointeur sur le premier caractère.
    transmise à une fonction par l'intermédiaire ...

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 13
    Par défaut
    le problème est que j'ai le warning suivant :

    warning: deprecated conversion from string constant to 'char*'

  8. #8
    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
    En effet, il est fortement conseillé de considérer qu'une chaîne de caractères littérale (c'est-à-dire une chaîne entre guillemets) est un tableau en lecture seule, c'est-à-dire que l'on peut lire son contenu mais que l'on ne peut pas le modifier. Quand tu écris :
    Tu pointes "le tableau" (en fait tu pointes juste sur le premier élément du tableau, mais c'est un abus de langage largement utilisé, même dans le document officiel qui décrit le langage C) avec un pointeur capable de modifier la donnée pointée. En effet *s = 'B' par exemple modifierait le premier 'b' de la chaîne en 'B'. Pour ne pas être tenté de faire cette horrible chose, il est fortement recommandé de déclarer le pointeur "const char *" et non "char *", ce qui signifie que le pointeur ne peut pas modifier la donnée pointée, ce qui est bien ce que nous cherchions. Un peu de lecture : Pointeurs constants et pointeurs sur constante.

Discussions similaires

  1. [Débutant] Conversion string vers char
    Par sachaaaz dans le forum C#
    Réponses: 6
    Dernier message: 12/03/2012, 11h42
  2. Conversion string to char *
    Par uriotcea dans le forum Débuter
    Réponses: 2
    Dernier message: 22/12/2009, 12h51
  3. conversion String to char*
    Par warning dans le forum C++Builder
    Réponses: 5
    Dernier message: 07/12/2007, 11h29
  4. Conversion String vers char
    Par benwit dans le forum Langage
    Réponses: 27
    Dernier message: 30/03/2007, 14h01
  5. conversion string to char* et erreur ATL CString
    Par Aliveli dans le forum Visual C++
    Réponses: 5
    Dernier message: 28/11/2006, 22h55

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