Erreur avec strcpy

ROnE91 Messages postés 9 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 14 janvier 2005 - 20 juil. 2003 à 22:44
fredcl Messages postés 547 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 7 octobre 2007 - 21 juil. 2003 à 12:19
R-OnE
Bonjour, je n'arrive pas a faire fonctionner cette fonction. J'utilise vc++6, le compilateur ne m'indique pas d'erreur mais il se produit une erreur d'execution à "strcpy(i1, data);", et j'ai le message suivant: "Unhandled exception in moviedst.exe: 0xC0000005: Access Violation."
La variable texte est de la forme "aaa|bbb|ccc|ddd|".
Si quelqu'un pouvait trouver une solution ca m'aiderai bien, ca fait un moment que je me prend la tete la dessus !

int AddDt(char * texte)
{
char c;
int step=0, pos=0, n=0;
char data[256];
char *i1, *i2, *i3, *i4;

for (step=0; step<3; step++)
{
pos = 0;

while (c != '|')
{
data[pos] = c = texte[n];
pos++;
n++;
}

data[pos-1] = '\0';

switch (step)
{
case 0:
i1 = "";
strcpy(i1, data);
break;

case 1:
i2 = "";
strcpy(i3, data);
break;

case 2:
i3 = "";
strcpy(i3, data);
break;

case 3:
i4 = "";
strcpy(i4, data);
break;
}
}

return 0;
}

6 réponses

cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
20 juil. 2003 à 23:06
Salut,
Essaye avec char i1[256];
Ca t'évitera d'ecrire n'importe ou...
0
cs_Wett Messages postés 104 Date d'inscription dimanche 2 mars 2003 Statut Membre Dernière intervention 12 juin 2005
21 juil. 2003 à 01:03
Et evite aussi les trucs du genre i1 = "" :/ là tu ecris dans le pointeur direct... comme tu fais un strcpy() juste apres tu peux t'en passer sans pb, mais a la limite si tu y tiens vraiment, fait au moins i1[0] = '\0'; , (*i1)='\0'; ou strcpy( i1, "" ); voila ^^ Mais deja change bien en i1[256] comme t'as dit aardman et tu evitera max d'erreurs ;)
0
fredcl Messages postés 547 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 7 octobre 2007 1
21 juil. 2003 à 10:54
Bonjour,

comme l'as dit wett tes i1 = ""; sont à proscrire

il faut simplement allouer l'espace mémoire sur lequel va pointer ton pointeur.

utilise malloc
if ((i1(char *) malloc(strlen(data) + 1)) NULL)
{
printf("pas asez de mémoire\n");
exit(1);
}
strcpy(i1, data);

tu ne devrais plus avoir de problème.

A+

Fred
0
ROnE91 Messages postés 9 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 14 janvier 2005
21 juil. 2003 à 11:47
Ca marche ! J'ai utilisé malloc et plus de problèmes.
Je débute en c++ et le traitement des chaines me donne du fil a retordre...
Merci a tous !
0

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

Posez votre question
cs_Wett Messages postés 104 Date d'inscription dimanche 2 mars 2003 Statut Membre Dernière intervention 12 juin 2005
21 juil. 2003 à 12:14
Hum si tu bosse en c++ tente plutot d'utiliser l'instruction new au lien de malloc, ca s'utilise comme ca:
i1 = new char[256];
et apres tu supprime de la memoire (qd tu n'en a plus besoin, ca peut etre à la destruction d'un classe ou la fin d'un programme)
delete [] i1;
Perso je prefere ca à malloc, je trouve la syntaxe plus claire, mais bon apres ca depend des preferences de chacuns ;)
Au fait il n'y a jamais eu de tutos sur la memoire dynamique ici? idem pr les char, c vraiment une plaie ces trucs, personnes n'a eu l'idée d'en expliquer le fonctionnement?
0
fredcl Messages postés 547 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 7 octobre 2007 1
21 juil. 2003 à 12:19
si on commence à utiliser le C++ autant l'utiliser completement. il existe dans vc++ une classe de gestion de chaine, de mémoire il me semble que c'est CString, a vérifier (je n'utilise pas ce compilo)

A+

Fred
0
Rejoignez-nous