Copy de char *

[Résolu]
Signaler
Messages postés
124
Date d'inscription
jeudi 2 janvier 2003
Statut
Membre
Dernière intervention
16 février 2006
-
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
-
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

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
phrase[] est un tableau de pointeurs, faut allouer pour chacun.
et desallouer ensuite.

ciao...
BruNews, MVP VC++
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
9
"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);
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
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
Messages postés
124
Date d'inscription
jeudi 2 janvier 2003
Statut
Membre
Dernière intervention
16 février 2006
2
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 ++
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
vecchio56> Autant pour moi je lisais char phrase[5] et non char * phrase[5].

Shell
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
9
non c'est pas vraiment ca
phrase[5] est un char*, donc un pointeur de char