Extraire une chaine de caractères

Signaler
Messages postés
15
Date d'inscription
jeudi 29 janvier 2004
Statut
Membre
Dernière intervention
18 mai 2004
-
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
-
Bonjour!
Voilà mon problème :
je désire lire un fichier, puis le parser, afin d'en extraire des données balisées
J'ai donc le contenu du fichier dans une chaine char* appelée ptr2.
Jessaye donc ensuite de découper le fichier :

char *ptr1;
int length, i=0;
while(ptr1 = strstr(ptr2, "<title>"))
{
ptr2 = strstr(ptr1, "</title>");
length = ptr2-7-ptr1;
title[i] = substr(ptr1, 7, length);
i++;
}

J'ai écrit la fonction substr :

char* substr(char* ori, int deb, int lg)
{
char *string;
string[lg] = '\0';
for(int i=0; i<lg; i++)
{
string[i] = '0';
}
return string;
}

Mon problème : le script parvient a lire le 1er élément balisé, mais les suivant (ils sont au total 0 non)
J'ai donc placé des printf un peu partout dans mon code, pour étudier l'évolution de ptr2. Je constate que jusqu'a lappel de la fonction substr, ptr2 se comporte normalement (j'obtiens ce a quoi je m'attendais).
Par contre après substr, tous mes pointeurs prennent la valeur de string. Quelqu'un aurait il une idée?

Merci d'avance!

15 réponses

Messages postés
15
Date d'inscription
jeudi 29 janvier 2004
Statut
Membre
Dernière intervention
18 mai 2004

OOps! tite erreur : la fonction substr c'est plutot :

char* substr(char* ori, int deb, int lg)
{
char *string;
string[lg] = '\0';
for(int i=0; i<lg; i++)
{
string[i] = ori[i+lg];
}
return string;
}
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
char *string;
string[lg] = '\0'; ?????
Tu ecris a quel emplacement dans la memoire, ou pointe donc *string ?!?!

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
15
Date d'inscription
jeudi 29 janvier 2004
Statut
Membre
Dernière intervention
18 mai 2004

reoops c'est pas i+lg mais i+deb sorry!
Messages postés
15
Date d'inscription
jeudi 29 janvier 2004
Statut
Membre
Dernière intervention
18 mai 2004

eee BruNews, merci pour ta réponse, eee, c'est pas bête ce que tu dis, je viens de corriger! merci 1000 fois! ca a l'air de courrir comme il faut!
encore merciiii!
Messages postés
15
Date d'inscription
jeudi 29 janvier 2004
Statut
Membre
Dernière intervention
18 mai 2004

hum une dernière question :

j'ai une fonction qui fait cela :

avec current un char*

char* link = strcat("http://www.puissance-pc.net/site/modules/news/article.php?storyid=", current);
Content->Caption= link;

Si j'appelle une première fois ca va, une deuxième je me retrouve avec deux current au lieu d'un.

Une idée?
Merci d'avance!
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
"je me retrouve avec deux current au lieu d'un" ? Que vuex-tu dire ?

strcat retourne pointeur sur *dest (1er param) alors pas besoin de mettre char *truc = strcat(...), tu as deja le pointeur puisque tu lui passes.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
ajouter une chaîne à une chaîne constante c'est pas terrible comme résultat.

ce que tu veux faire c'est plutôt ça :
char link[256] = "http:\....";
strcat(link, current);
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
ah oui et en + c'est sur une constante, on est au top !!!

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
15
Date d'inscription
jeudi 29 janvier 2004
Statut
Membre
Dernière intervention
18 mai 2004

et bien je veux dire que je me retrouve avec un lien qui ressemble à ca :
http://www.puissance-pc.net/site/modules/news/article.php?storyid=556556

au lieu de :
http://www.puissance-pc.net/site/modules/news/article.php?storyid=556

Voilà.

Merci pour l'indic, mais ca n'a pas changé grand chose à mon problème ;)
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
strcat ne peut pas rajouter du texte à une constante entre "", il faut d'abord mettre cette constante dans une chaîne (assez grande pour contenir le résultat final) puis faire strcat
Messages postés
15
Date d'inscription
jeudi 29 janvier 2004
Statut
Membre
Dernière intervention
18 mai 2004

merci beaucoup ymca2003, ca fonctionne a merveille!

Merci à tous!

:kisses)
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
spacegate >

ta chaine est constante, t'ecris sur la pile la
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
djil> NON, si c'est une constante il ecrit sur un segment de donnees et non sur la pile, detail important.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
oui desole