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 char[] pas très propre


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 216
    Par défaut Conversion string char[] pas très propre
    Bonjour,

    J'ai besoin de convertir un string en char[] (je ne veux pas en char*). Pour l'instant je fais ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    std::string username_string=uneFonction();
    char username[255];
    int i=0;
    if(username_str.size()<255)
    {
    	for(i=0;i<username_str.size();i++)
    		username[i]=username_str.at(i);
    }
    username[i]='\0';
    ça marche mais c'est pas top. J'aimerais ne pas imposer une taille constante à mon tableau de char.
    Dans l'idéal

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char username[username_string.size()+1];
    Mais on ne peut pas faire cela.

    Existe-t-il un autre moyen d'effectuer cetter conversion?

    Merci d'avance

  2. #2
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Dans une boucle dont les bornes sont maitrisé n'utilise pas at() mais l'opérateur []. De plus pourquoi as-tu besoin d'une telle conversion? Si c'est pour s'interfacer avec une quelconque bibliothèques alors la conversion doit être à l'appelle d'une fonction non?
    dans ce cas tu peux faire directement appel à c_str(), puisque dans le cadre des paramètres d'une fonction char* et char[] sont équivalents.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 216
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dans une boucle dont les bornes sont maitrisé n'utilise pas at() mais l'opérateur []
    Ok

    En fait je travaille sur une extension firefox. J'ai dans une fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    char **_retval
    //allocate a copy of the thing and transfer ownership of the copy to the caller
    *_retval = (char*) nsMemory::Clone(username,sizeof(char)*(strlen(username)+1));
    return *_retval
    Si je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const char *username=maFonction().c_str();
    ça compile bien, mais je ne récupère pas correctement la valeur de retour. Tandis qu'avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    std::string username_string=uneFonction();
    char username[255];
    int i=0;
    if(username_str.size()<255)
    {
    	for(i=0;i<username_str.size();i++)
    		username[i]=username_str[i];
    }
    username[i]='\0';
    ça marche bien.

    J'avoue que je n'ai pas encore bien compris pourquoi.

  4. #4
    screetch
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const char *username=maFonction().c_str();
    cela construit une std::string temporaire, récupère un pointeur dessus puis detruit la chaine (temporaire, qu'on a dit)

    si tu veux faire marcher tu dois stocker le temporaire quelque part pour qu'il ne soit pas détruit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    std::string username=maFonction();
    char **_retval
    //allocate a copy of the thing and transfer ownership of the copy to the caller
    *_retval = (char*) nsMemory::Clone(username.c_str(),sizeof(char)*(username.length()+1));
    return *_retval

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 216
    Par défaut
    Merci screetch,

    Cela marche maintenant

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

Discussions similaires

  1. Conversion string=>char c/c++ pour utiliser dans fonction
    Par pierro91 dans le forum Débuter
    Réponses: 11
    Dernier message: 12/02/2014, 13h54
  2. Conversion Long en int pas très propre !
    Par totoche dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 12/09/2008, 09h50
  3. correction d'un calcul de pointeur pas très propre
    Par contremaitre dans le forum C
    Réponses: 11
    Dernier message: 12/09/2008, 09h48
  4. [débutant mais pas trop] conversion string->entier
    Par Biosox dans le forum Débuter
    Réponses: 5
    Dernier message: 06/01/2006, 22h41
  5. Borland + sqlite (aducom) + string > 256 char = pas conte
    Par spyroux dans le forum C++Builder
    Réponses: 1
    Dernier message: 16/12/2005, 22h48

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