Convertir un const char * en char *

Signaler
Messages postés
70
Date d'inscription
lundi 17 décembre 2001
Statut
Membre
Dernière intervention
24 juillet 2004
-
cs_Kaid
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006
-
SAlut,

j'aimerais convertir un 'const char *' en 'char *', bizarement aucune libraire ne le fé, ou alors j'ai pas trouvé lol. Donc si vous pouviez m'aider.
MErci d'avance.

12 réponses

Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
char * et const char* ne sont que des pointeurs sur char, rien de plus.
Le const veut simplement dire que la fonction ne doit pas modifier la chaine de caractere.
Essaie un cast (char*) devant ton "const char*".
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
Salut,
const char* et char* c'est la meme chose.
Messages postés
70
Date d'inscription
lundi 17 décembre 2001
Statut
Membre
Dernière intervention
24 juillet 2004
1
mdr, en tout cas pas pour ' strcat(char *, const char *) ', essai de passé un const char * en premier parametre de cette fonction ( trés connu ), tu vera bien ...

Il faut imperativement convertir le const char * en char *, pas le choix, sinon tu rentre pas dans la fonction.

Si vous avez des idée ???
Messages postés
70
Date d'inscription
lundi 17 décembre 2001
Statut
Membre
Dernière intervention
24 juillet 2004
1
ué justement si tu c comment marche strcat tu devrai comprendre :

la fonction prend la chaine du second parametre ( const char * ) et l'ajoute à la chaine du premier parametre, qui doit donc, ce premier parametre, etre modifiable et non constant ( logique, car une chaine constante ne pe pas etre reecrite ) ... et donc pas de cast possible aussi ...

voila reflechi au truc ... fé des test si tu ve, tu vera ça marche pas.
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
Je sais tres bien comment marche strcat().

Tu essayerai pas de faire strcat("un mot", "un autre mot"); par hazard ?
La c'est sur que ca fonctionnera jamais.
Messages postés
70
Date d'inscription
lundi 17 décembre 2001
Statut
Membre
Dernière intervention
24 juillet 2004
1
On y vient lol, voila pourquoi j'ai besoin de convertir un 'const char *' en 'char *', j'ai une fonction qui me renvoie un const char * que je dois ensuite passé par cette fonction strcat, je suis donc obliger de la convertir en char *.

voila
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
Je pense que tu ne pourra pas concatener ce que te retourne ta fonction et autre chose avec strcat().
Messages postés
70
Date d'inscription
lundi 17 décembre 2001
Statut
Membre
Dernière intervention
24 juillet 2004
1
Bah si lol, suffit de convertir ton retour en char *, je l'es fé avec une petite routine, mais je pense qu'y a de meilleur solus ...
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006

Un cast suffit amplement à enlever le paramètre constant sur un pointeur. Mais si tu es ammené à faire ca, c'est que ton programme est mal conçu.

De toute façon dans ton cas:

const char* str1=MaFunction();
strcat((char*)str1, str2);


Il n'y a pas assez de place pour stocker les deux chaines de caractères, dépassement de tableau. Donc la solution:

const char* str1=MaFunction();

char* str3=new char[strlen(str1) + strlen(str2) + 1];
strcpy(str3, str1);
strcat(str3, str2);

// ...

delete [] str3;



Kaid
Messages postés
70
Date d'inscription
lundi 17 décembre 2001
Statut
Membre
Dernière intervention
24 juillet 2004
1
Ahh je savais bien qui y'avait une fonction pour ça, elle s'appelle strdup() et se trouve dans string.h. elle convertie un const char * en char * .

eh bah j'aurais galeré pour la trouvé.
MErci qd même a tous
Ciao
Messages postés
3
Date d'inscription
jeudi 14 août 2003
Statut
Membre
Dernière intervention
30 août 2003

-------------------------------
Réponse au message :
-------------------------------

> Ahh je savais bien qui y'avait une fonction pour ça, elle s'appelle strdup() et se trouve dans string.h. elle convertie un const char * en char * .
>
> eh bah j'aurais galeré pour la trouvé.
> MErci qd même a tous
> Ciao
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Un cast suffit amplement à enlever le paramètre constant sur un pointeur. Mais si tu es ammené à faire ca, c'est que ton programme est mal conçu.
> >
> > De toute façon dans ton cas:
> >
> >
> > const char* str1=MaFunction();
> > strcat((char*)str1, str2);
> > 

> >
> > Il n'y a pas assez de place pour stocker les deux chaines de caractères, dépassement de tableau. Donc la solution:
> >
> >
> > const char* str1=MaFunction();
> > 
> > char* str3=new char[strlen(str1) + strlen(str2) + 1];
> > strcpy(str3, str1);
> > strcat(str3, str2);
> > 
> > // ...
> > 
> > delete [] str3;
> > 
> > 

> >
> > Kaid
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > Bah si lol, suffit de convertir ton retour en char *, je l'es fé avec une petite routine, mais je pense qu'y a de meilleur solus ...
> > >
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > > Je pense que tu ne pourra pas concatener ce que te retourne ta fonction et autre chose avec strcat().
> > > >
> > > > -------------------------------
> > > > Réponse au message :
> > > > -------------------------------
> > > >
> > > > >
> > > > >
> > > > > On y vient lol, voila pourquoi j'ai besoin de convertir un 'const char *' en 'char *', j'ai une fonction qui me renvoie un const char * que je dois ensuite passé par cette fonction strcat, je suis donc obliger de la convertir en char *.
> > > > >
> > > > > voila
> > > > >
> > > > >
> > > > > -------------------------------
> > > > > Réponse au message :
> > > > > -------------------------------
> > > > >
> > > > > > Je sais tres bien comment marche strcat().
> > > > > >
> > > > > > Tu essayerai pas de faire strcat("un mot", "un autre mot"); par hazard ?
> > > > > > La c'est sur que ca fonctionnera jamais.
> > > > > >
> > > > > >
> > > > > > -------------------------------
> > > > > > Réponse au message :
> > > > > > -------------------------------
> > > > > >
> > > > > > >
> > > > > > > ué justement si tu c comment marche strcat tu devrai comprendre :
> > > > > > >
> > > > > > > la fonction prend la chaine du second parametre ( const char * ) et l'ajoute à la chaine du premier parametre, qui doit donc, ce premier parametre, etre modifiable et non constant ( logique, car une chaine constante ne pe pas etre reecrite ) ... et donc pas de cast possible aussi ...
> > > > > > >
> > > > > > > voila reflechi au truc ... fé des test si tu ve, tu vera ça marche pas.
> > > > > > >
> > > > > > > -------------------------------
> > > > > > > Réponse au message :
> > > > > > > -------------------------------
> > > > > > >
> > > > > > > > char * et const char* ne sont que des pointeurs sur char, rien de plus.
> > > > > > > > Le const veut simplement dire que la fonction ne doit pas modifier la chaine de caractere.
> > > > > > > > Essaie un cast (char*) devant ton "const char*".
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > -------------------------------
> > > > > > > > Réponse au message :
> > > > > > > > -------------------------------
> > > > > > > >
> > > > > > > > >
> > > > > > > > > mdr, en tout cas pas pour ' strcat(char *, const char *) ', essai de passé un const char * en premier parametre de cette fonction ( trés connu ), tu vera bien ...
> > > > > > > > >
> > > > > > > > > Il faut imperativement convertir le const char * en char *, pas le choix, sinon tu rentre pas dans la fonction.
> > > > > > > > >
> > > > > > > > > Si vous avez des idée ???
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > -------------------------------
> > > > > > > > > Réponse au message :
> > > > > > > > > -------------------------------
> > > > > > > > >
> > > > > > > > > > Salut,
> > > > > > > > > > const char* et char* c'est la meme chose.
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > -------------------------------
> > > > > > > > > > Réponse au message :
> > > > > > > > > > -------------------------------
> > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > > SAlut,
> > > > > > > > > > >
> > > > > > > > > > > j'aimerais convertir un 'const char *' en 'char *', bizarement aucune libraire ne le fé, ou alors j'ai pas trouvé lol. Donc si vous pouviez m'aider.
> > > > > > > > > > > MErci d'avance.
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006

strdup() ne sert pas à enlever un 'const' mais à dupliquer une chaine de caractères, d'où son nom. En fait elle fait l'allocation dynamique puis la copie via strcpy().

Kaid