Convertion d'une string en char

redpooka Messages postés 55 Date d'inscription mardi 18 février 2003 Statut Membre Dernière intervention 18 mai 2004 - 9 mars 2003 à 14:49
cs_idrisbenali1 Messages postés 1 Date d'inscription vendredi 14 mars 2008 Statut Membre Dernière intervention 2 avril 2008 - 2 avril 2008 à 16:05
Voici avec ce programme ca n'affiche juste le premier charactère comment faire pour qu'il affiche toute la chaine de caracètre ?

Merci

#include 
#include <string>

char string_en_char(string &La_chaine)
{                                                    /*On met le string dans une chaine de carctère*/
 char Char_Chaine[La_chaine.size()+1];        /*Il faut penser a mettre un caractère en plus pour celui de fin*/
 for (int i=0; i < La_chaine.size(); i++)        /*On met la premiere string dans la chaine de caractère*/
    {
     Char_Chaine[i]=La_chaine[i];
    }
    Char_Chaine[La_chaine.size()]='\0';
   return ( *Char_Chaine);
}

main()
{
  string test="Salut";
  char  test2 = (string_en_char(test)) ;

  cout << "\nla voici " << test2 << "\n";

}

3 réponses

cs_C2S Messages postés 38 Date d'inscription vendredi 7 février 2003 Statut Membre Dernière intervention 20 mars 2005
9 mars 2003 à 16:53
Salut

Tu fais une grosse confusion entre les char et les char* en C... je vais essayer de t'expliquer tout ca:

un char est un caractère (je penses que tu le sait)
un char* est un poibteur sur caractère (l'adresse d'un caractère)
un tableau de char : un char Chaine[] est une suite de carateres!

La ou le C c'est de la merde, c'est qu'un pointeur sur caractère et un tableau de caractère, c'est la meme chose!

en fait, quand on interperte un char* comme une chaine de caractere, on concidère l'objet pointé par le char* (un premier caractère) puis tout les elements qui le suivent dans la memoire du systeme jusqu'a ce que l'on recontre un \0 !!
la difference entre le char* et le char [], c'est que l'on ne determine pas la taille du char* (il faut lui proposer un espace mémoire avec un malloc() )

pour en revenir a ton problème, ta fonction string_en_char renvoi ,un char (donc un unique caractère) ta fonction est donc équivalante à "return String[0]" !!!!
si tu veux renvoyer un char* (une chaine de caractere au sens C) tu doit enlever l'etoile avant le return MAIS dans ce cas la ca passera pas a la com!pilation car tu va renvoyer l'adresse du premier caractère, or cette adresse est d'éclarée dans ta fonction appelante!!!!

donc tu as plusieurs solutions :

1 - Utiliser un malloc (ce qui te pêrmet de créer un un esapce mémoire dans le TAS)
#include
#include <string>
#include <malloc.h>

char* string_en_char(string &La_chaine)
{
/*On met le string dans une chaine de carctère*/
char* Char_Chaine = (char*)malloc(La_chaine.size()+1);
/*Il faut penser a mettre un caractère en plus pour celui de fin*/
for (int i=0; i < La_chaine.size(); i++)
/*On met la premiere string dans la chaine de caractère*/
{
Char_Chaine[i]=La_chaine[i];
}
Char_Chaine[La_chaine.size()]='\0';
return ( Char_Chaine);
}

main()
{
string test="Salut";
char* test2 = (string_en_char(test)) ;

cout << "\nla voici " << test2 << "\n";
system("PAUSE") ;
}

2 - Solution :

Il existe une méthode en C++ de la casse string qui fait ce que tu veux!!!

#include
#include <string>

main()
{
string test="Salut";
const char* test2 = test.c_str();

cout << "\nla voici " << test2 << "\n";
system("PAUSE") ;
}

ou encore (si tu veux pouvoir modifier téa chaine de caractère :

#include
#include <string>

main()
{
string test="Salut";
char* test2 = const_cast<char*>(test.c_str());

cout << "\nla voici " << test2 << "\n";
system("PAUSE") ;
}

Voila, si il y a des choses que tu comprend pas hesites pas a m'ecrire!!

Bou courage!
------------
C2S
------------
0
redpooka Messages postés 55 Date d'inscription mardi 18 février 2003 Statut Membre Dernière intervention 18 mai 2004 2
9 mars 2003 à 20:40
Merci beaucoup pour cette réponse très bien détaillé !
0
cs_idrisbenali1 Messages postés 1 Date d'inscription vendredi 14 mars 2008 Statut Membre Dernière intervention 2 avril 2008
2 avril 2008 à 16:05
je n'y comprend rien !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
0
Rejoignez-nous