Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Convertion d'une string en char [ Archives / Au secours ] (redpooka)

dimanche 9 mars 2003 à 14:49:31 | Convertion d'une string en char

redpooka

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";

}


dimanche 9 mars 2003 à 16:53:39 | Re : Convertion d'une string en char

C2S

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";
>
> }
>
>


dimanche 9 mars 2003 à 20:40:42 | Re : Convertion d'une string en char

redpooka

Merci beaucoup pour cette réponse très bien détaillé !

mercredi 2 avril 2008 à 16:05:07 | Re : Convertion d'une string en char

idrisbenali1

je n'y comprend rien !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!



Cette discussion est classé dans : string, chaine, char, size, convertion


Répondre à ce message

Sujets en rapport avec ce message

convertion CString à char[ ]! [ par souaisou ] comment convertir de cstring a une chaine de caracteres et d'un chaine de caractere a un cstring....Merci problème d'allocation mémoire dans ma classe [ par Bub325 ] Salut, j'ai un problème dans le code suivant au niveau de l'allocation mémoire de tmp.a = new char... dans operator+, et je ne sait pas du tout pourqu Convertion "15"(string) --> 15(int) [ par crocejf2000 ] (Re)SalutIl faut que je test ma chaine et que je la convertisse si je peut. Avec atoi("12"), ca me donne bien 12, mais si je fait un atoi("12hach"), c string [ par ToToL ] BonjourComme le dit le sujet j'ai un probleme de string ...... ;-)en fait j'ai un char remplit d'une chaine de caractere avec a un endroit de la chain Allocation dynamique de char* .... [ par Gendal67 ] Bonjour à tous....Avant d'acheter un flingue pour de bon, je me suis dit qu'il pourrait etre judicieux de demander de l'aide quelque part... voila, je problème conversion string to char* [ par totoscill ] Bonjour,je veut récupérer des infos dans un fichier. Pour cela il me faut convertir mes lignes récupérer "string" en "char*". Voici mon code pour cett C string compare [ par Yunchi ] Bonjour, Je recherche une fonction dans le bibliotheque string.h ou autre qui permettrait en fait de savoir si une chaine est presente dans une autre transtypages char System::String [ par steph12358 ] Bonjour à tousj'ai fait du c++ avec QT4 sous linux pendant quelques mois et j'ai beaucoup de difficulté à trouver des tutos sur "visual c++ 2005" (j'a Liste de combinaisons [ par simtiers ] Salut !Voilà, ce code compile parfaitement, je le pense correct, mais dès la première execution, il me plante méchamment dans les mains : ACCESS VIOLA copier une valeur dans une structure [ par Kurpeus1 ] Bonjour, désolé de reposer la question mais j'ai un soucis depuis plusieurs jour et je n'arrive pas a le résoudre. Il me semble pourtant que pour un d


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,390 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.