veka61
Messages postés4Date d'inscriptionmercredi 26 septembre 2007StatutMembreDernière intervention 2 octobre 2007
-
1 oct. 2007 à 05:11
Pistol_Pete
Messages postés1053Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention 9 juillet 2013
-
3 oct. 2007 à 09:26
Bonjour tout le monde,
Voila j'essai depuis plusieurs jour de creer une fonction pour transformer un string en char seulement j'obtient une erreur que je ne sait pas resoudre .
Donc je compte sur vous pour éclairer ma lanterne .
Pistol_Pete
Messages postés1053Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention 9 juillet 20137 1 oct. 2007 à 08:23
Dans ta fonction string_to_char(), tu renvoies une variable locale !
Fait ton allocation dynamique dans cette fonction et renvoyes l'adresse que tu stock dans le pointeur ctexte du main.
char *string_to_char ( string stexte )
{
int t = stexte.length();
char *ctexte=new char[t+1]; //+1 pour le '\0'
for (int a = 0 ; a < t ; a++ )
{
ctexte[a] = stexte[a] ;
}
ctexte[t] = 0 ;
return ctexte;
}
int main(int Argc, const char *Argv[])
{
char *ctexte;
// Conversion de string en const char c'est a dir en lecture seul ;(
string stexte = "bonjour tout le monde" ;
cout <<"\n String = " << stexte << " -------> " << " Char = " ;
int index = stexte.length();
ctexte= string_to_char (stexte) ;
cout << ctexte << "\n\n\n"<< endl ;
BunoCS
Messages postés15472Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention25 mars 2024103 1 oct. 2007 à 08:56
Salut,
Sauf erreur de ma part, si tu fais sTexte.data(), tu obtiens directement un char *. Pas besoin donc de faire une fonction de conversion, à moins bien sûr que ce ne soit un exercice...
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013 1 oct. 2007 à 10:09
Pistol_Pete : Tu repproche à veka 61 de renvoyer une variable locale.... Mais dans ton exemple tu fais pire.. Tu renvoies un pointeur local à ta fonction!!! En gros à la sortie de ta fonction tu n'est pas sure de ce que vaudra le pointeur!
L'unique solution est d'utiliser un paramètre de sortie.
Voici un prototype de fonction qui conviendrai.
int string_to_char(string src, char * dest); // La fonction "alimente" un pointeur déjà défini par l'appelant et renvoi par exemple la taille de la chaîne résultante.
Sinon pour convertir une strign en char* tu as la propriété c_str() (ex: cTexte.c_str())
Shell
Vous n’avez pas trouvé la réponse que vous recherchez ?
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 1 oct. 2007 à 11:49
DeAtHCrAsH =>"Mais dans ton exemple tu fais pire.. Tu renvoies un pointeur local à ta
fonction!!! En gros à la sortie de ta fonction tu n'est pas sure de ce
que vaudra le pointeur!"
=> La solution proposée par Pistol_Pete est tout a fait correcte. Sa fonction renvoie une adresse qui est récupérée dans la variable ctexte;
ctexte = string_to_char (stexte);
Le seul défaut, c'est de devoir désallouer soi meme la mémoire allouée par une fonction.
veka61
Messages postés4Date d'inscriptionmercredi 26 septembre 2007StatutMembreDernière intervention 2 octobre 2007 1 oct. 2007 à 17:54
Tout d'abord merci pour toute vos reponses,
la solution de Pistol_Pete fonctionne seulement je cherche a creer un char et nom un pointeur !
Le but et de creer une fonction qui me renvoi un char classique.
J'ai deja réussi la transformation mais sans fonction pour etre plus claire voici se que je voudrait faire avec une fonction.
BunoCS
Messages postés15472Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention25 mars 2024103 1 oct. 2007 à 17:58
char texte[n]; --> ne marche pas car n est une variable.
char * pTexte = new char(n); --> OK mais ne pas oublier de faire un delete après utilisation!
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 1 oct. 2007 à 18:57
"la solution de Pistol_Pete fonctionne seulement je cherche a creer un char et nom un pointeur !"
=> Je crois que tu devrais te plonger un peu dans un livre de C.
"Je suis désoler buno mais mon code fonctionne tres bien !"
=> C'est pas parce que ca marche dans ton exemple, que c'est correct.
Pistol_Pete
Messages postés1053Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention 9 juillet 20137 2 oct. 2007 à 08:16
Au vu du titre de cette question, je pensais que tu voulais que la taille
de ton tableau soit dynamique... Si tu veux unedimension dynamique
il faut obligatoirement faire une allocation dynamique.
Si tu ne veux pas te charger de la desallocation il faut faire une
allocation statique et passer le pointeur à ta fonction:
#include <string>
#include
using namespace std;
void string_to_char (char *ctexte,string stexte )
{
int t = stexte.length();
for (int a = 0 ; a < t ; a++ )
ctexte[a] = stexte[a] ;
ctexte[t] = 0 ;
}
int main(int Argc, const char *Argv[])
{
char ctexte[50];
// Conversion de string en const char c'est a dir en lecture seul ;(
string stexte = "bonjour tout le monde" ;
cout <<"\n String = " << stexte << " -------> " << " Char = " ;
int index = stexte.length();
string_to_char (ctexte,stexte) ;
cout << ctexte << "\n\n\n"<< endl ;
Pistol_Pete
Messages postés1053Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention 9 juillet 20137 3 oct. 2007 à 09:26
Exactement
Seulement je te conseille très fortement d'utiliser les allocations dynamiques. Si tu veux progresser en C/C++, cela passera forcement par l'apprentissage des allocations dynamiques.
Bonne continuation