Pointeur sur char *

Clonk Messages postés 278 Date d'inscription mardi 22 janvier 2002 Statut Membre Dernière intervention 29 août 2006 - 30 juin 2004 à 11:12
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 - 30 juin 2004 à 12:32
Bonjour,
Voilà mon petit problème:
je voudrais copier dans une variable x le contenu d'une variable y jusqu'à un caractère spécifié.
Je voudrais aussi enlever de y la valeur de x.
ex : y = "a, b, c" je veux copier jusqu'à la première virgul et avoir:x "a" et y "b, c"
voilà comment je l'ai fait pour le moment:

int substr(char * src, const char * car, char * Dst)
{
char * l;
char * c = src;
char * t = Dst;
//Je récupère l'adresse de monpremier caractère de séparation:if (NULL (l strstr (c, car)))
return -1;
//s'il n'existe pas, je sors.
while (*c != *l)
{
//Je recopie dans Dst le contenu de src jusqu'à mon caractère spécifique
*t++ = *c++;
}
*l++;
*l++;
//Je remet C au début de src
c = src;
//je copie le contenu de l dans src:
while (*l)
*c++ = *l++;
*t = 0;
*c = 0;
return 0;
}

le problème : je n'arrive pas à copier l dans src : unhandled exception.... Access violation

Alors si quelqu'un sait ce que se passe....

Merci ;)

4 réponses

cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
30 juin 2004 à 11:40
Tu veux simplement copier une chaine dans une autre juska une virgule ou otre caractere ??
exemple :

char sBuffer[] = "a,b,c";
char *s = sBuffer;
char sNew[256], *n = sNew;

do {
*n++ = *s++;
} while (*s != ',');
*n = 0;

Voila, c oci simple ke ca ! Si c pas tt a fait ca ke tu voulais, nésite pas a redemander !

++

Alhexman
0
Clonk Messages postés 278 Date d'inscription mardi 22 janvier 2002 Statut Membre Dernière intervention 29 août 2006
30 juin 2004 à 11:55
Ca je sais le faire, C déjà ce qui est fait dans ma fonction, le truc C qu'apres, je veux virer dans la première variable le contenu de la deuxième.Y "a, b, c", x NULL
apres traitement : Y "b, c", x "a"
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
30 juin 2004 à 12:02
ok.

char *sBuffer, *s;
char sNew[256], *n = sNew;

sBuffer = (char *)malloc(6);
strcpy(sBuffer, "a,b,c");

do {
*n++ = *sBuffer++;
} while (*sBuffer != ',');
*n = 0; sBuffer++;

....

free(sBuffer);

Voila, au lieu de travailler avec des pointeurs sur ton buffer, tu travailles directement sur celui-ci.

++

Alhexman
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
30 juin 2004 à 12:32
J'ai oublié :

char *save;

apres l'allocation, tu fais un save = sBuffer; pour sauvegarder l'adresse d'allocation pour ensuite pouvoir libéré proprement : free(save);

voila

++

Alhexman

PS : jne sui pas tres sur de cette methode, donc verifie sil n'y a pas de memory leak a partir d'un pti code present sur le site...
0
Rejoignez-nous