redpooka
Messages postés55Date d'inscriptionmardi 18 février 2003StatutMembreDernière intervention18 mai 2004
-
9 mars 2003 à 14:49
cs_idrisbenali1
Messages postés1Date d'inscriptionvendredi 14 mars 2008StatutMembreDerniè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";
}
cs_C2S
Messages postés38Date d'inscriptionvendredi 7 février 2003StatutMembreDernière intervention20 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);
}