Concaténer char* et string

Francky_ Messages postés 64 Statut Membre -  
Francky_ Messages postés 64 Statut Membre -
Bonjour,

je souhaiterai mettre dans une variable du texte + la valeur d'une autre variable.
j'ai une fonction :

void truc(string message)
{
char* sbuf = "blableable"+message;
}
error: cannot convert 'std::basic_string<char>' to 'char*' in assignment

merci

2 réponses

  1. ElementW Messages postés 5690 Statut Contributeur 1 293
     
    'lut, gérer des string style C, c'est pas aussi simple...
    Passe d'abord par un gros string (ici
    message
    ), puis récupères le string C après:
    void truc(string message)
    {
        message = "blableable"+message; // message est une copie locale car c'est pas une référence (sinon ça serait "string &message")
        const char* sbuf = message.c_str(); // n'est pas modifiable par contre
    }
    Si tu veux modifier sbuf, il faut copier le string C donné par
    message
    pour qu'il ne soit pas
    const
    :
    char* sbuf = new char[message.length() + 1];
    strcpy(sbuf, message.c_str());
    [...]
    delete [] cstr;
    Si tu codes en C++11 ou 14, pense à utiliser unique_ptr ou shared_ptr pour gérer automatiquement la désallocation du tableau de
    char
    .
    from human import idiocy
    del idiocy
    0
  2. Francky_ Messages postés 64 Statut Membre 5
     
    salut,

    Et bien que dire à part un grand merci.
    ça marche IMPECCABLE. ;)
    Juste une question : ça fait quoi concrètement .c_str() ?

    Encore un grand merci à toi !
    0
    1. ElementW Messages postés 5690 Statut Contributeur 1 293
       
      .c_str()
      renvoie un pointeur
      const char*
      vers une représentation du string sous la forme d'un string C. Sauf que cette représentation ne doit pas être modifiée (d'où le
      const
      ), car c'est pas nous qui gérons ce morceau de mémoire, en effet, il devient invalide quand on modifie le string ou quand il est détruit (fin de la fonction par ex.), et ça peut (autant que ça peut ne pas) être la vraie zone mémoire qui contient le vrai contenu du string.
      0
    2. Francky_ Messages postés 64 Statut Membre 5
       
      un peu compliqué mais je vois à peu près le truc ;)
      merci pour tes explications.

      Bonne soirée.
      0