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 <iostream>
#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 <iostream>
#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 <iostream>
#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
------------
-------------------------------
Réponse au message :
-------------------------------
> 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 <iostream> > #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"; > > } > > |