Chaine de caractères....

Signaler
Messages postés
278
Date d'inscription
mardi 22 janvier 2002
Statut
Membre
Dernière intervention
29 août 2006
-
Messages postés
278
Date d'inscription
mardi 22 janvier 2002
Statut
Membre
Dernière intervention
29 août 2006
-
Bonjour,
Voilà, j'ai un problème depuis hier sur uen histoire de chaine de caractères... je sais que c'est une erreur bête, mais je n'arrive pas à trouver d'où ça vient...

j'utilise 3 variables de type char *:

char *newname = NULL;
char *name = "mytest.txt";
char *mask = "bak.txt";

Apres je veux modifier la fin du nom de fichier de name de façon ici à ce que : newname = "mytestbak.txt"
j'apelle donc :
Replace(but, mask, newname);

avec le code suivant :
void Replace(char *src, char *mask, char *srnew)
{
char *c;
strncpy(srnew, src, sizeof(src));
c = strstr(srnew, mask);
strncpy(c, mask, sizeof(mask));

}

le problème : à l'execution, j'obtiens access violation sur le premier strncpy (C pas la methode qui fait ça, j'ia eu ça même en reprenant des fonciton de modification de chaines présentes sur le site...)

Je pense que C une question de mémoire, mais vu comment je suis pas une flèche en C++, j'ai pas encore toruvé...

Merci!

3 réponses

Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
Tes variables sont de type char *, ce sont donc des pointeurs, tu ne peu pas leur affecter des données si auparavant tu ne leur a pas alloué de la memoire : malloc, calloc ou realloc !!! (HeapAlloc si tu travailles avec les api)

Voila, ++

Alhexman
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
lorsque tu passe des chaînes de caractères par l'intermédiaire de char*, tu ne peut pas utiliser sizeof() pour connaître la taille de la chaîne, i lfaut la paser en paramètre. sizeof() sur une variable de type char* renverra systématiquement 4 (taille d'un pointeur sur plateforme 32 bits).
Messages postés
278
Date d'inscription
mardi 22 janvier 2002
Statut
Membre
Dernière intervention
29 août 2006

OK, merci à tous les 2, c'est bon, ça marche pour moi.
Il y avait les 2 erreurs dont vous m'avez parlé.

++