Copy de char *

Résolu
cs_Tidam Messages postés 124 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 16 février 2006 - 2 janv. 2005 à 19:49
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 2 janv. 2005 à 21:47
Voila en gros une partie de mon prog :

char * phrase [5];
char *test = new char [50];
...
strcpy(phrase[2],test);

Et le programme plante. Le probleme est pourquoi (logique :D).
Si vous avez une petite idée voir même une solution j'en serais ravit !

Merci d'avance

6 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
2 janv. 2005 à 20:06
phrase[] est un tableau de pointeurs, faut allouer pour chacun.
et desallouer ensuite.

ciao...
BruNews, MVP VC++
3
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
2 janv. 2005 à 20:53
"phrase est de taille inférieure a test"

test[2] ne pointe nulle part; ne parlons pas de taille

char * phrase [5];
char *test = new char [50];
phrase[2] = new char[50]
...
strcpy(phrase[2],test);
3
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
2 janv. 2005 à 20:22
phrase est de taille inférieure a test, tu risques des débordements.

Sinon si tu souhaites commencer a copier ta chaine a partir du deuxième élément, tu dois procédé comme suit :

strcpy(phrase + 2, test);

Sinon si tu souhaites copier intégrallement :

strcpy(phrase, test);

N'oublie pas qu'un tableau est en fait un pointeur qui allour une zone mémoire de taille constante.

Ainsi char phrase[5] équivaut a char *phrase = new char[5] a la seule différence que dans le deuxième cas tu peut allouer dynamiquement et donc redimenssionner ton tableau en tout point de ton programme.

Shell
0
cs_Tidam Messages postés 124 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 16 février 2006 2
2 janv. 2005 à 20:54
non c'est pas vraiment ca
phrase[5] est un pointeur sur un char *
exemple:
phrase[1] -> "salut"
phrase[2] -> "bonjour"
...

mais j'ai trouvé la solution:
for (int i=0;i<5;i++)
phrase[i] = new char [50];

Merci a tous ++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
2 janv. 2005 à 21:05
vecchio56> Autant pour moi je lisais char phrase[5] et non char * phrase[5].

Shell
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
2 janv. 2005 à 21:47
non c'est pas vraiment ca
phrase[5] est un char*, donc un pointeur de char
0
Rejoignez-nous