Problème : Mon prog ne marche pas.
Fermé
EL barto !
Messages postés
121
Date d'inscription
samedi 25 octobre 2008
Statut
Membre
Dernière intervention
7 août 2009
-
30 oct. 2008 à 23:29
bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 - 31 oct. 2008 à 21:44
bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 - 31 oct. 2008 à 21:44
26 réponses
EL barto !
Messages postés
121
Date d'inscription
samedi 25 octobre 2008
Statut
Membre
Dernière intervention
7 août 2009
6
30 oct. 2008 à 23:30
30 oct. 2008 à 23:30
au fait ! voici le code du programme :
#include <windows.h> #include <stdio.h> #include <stdlib.h> #include <curl/curl.h> //Variables globales char buffer[50000]; int offset = 0; /*là c'est la définition de la fontion buffer_write pour allouer la bonne taille au buffer*/ size_t buffer_write (const void *ptr, size_t size, size_t nmemb, FILE *stream) { int i; char *myptr = (char *) ptr; for (i=0; i < size * nmemb; i++) { if (i + offset >= sizeof(buffer)) break; buffer[i + offset] = myptr[i]; offset++; } return size * nmemb; } int main(int argc, char *argv[]) { char url[1024]; int u; int y; const int TAILLE_CHAINE_MAX = 55555; char * debut = "<a href=\""; char * fin = "\""; char buffer[TAILLE_CHAINE_MAX]; buffer[50000] = -1; buffer[TAILLE_CHAINE_MAX-1] = '\0'; char sous_chaine[TAILLE_CHAINE_MAX]; int u = 0; int indice = 0; int taille = strlen( debut ); int ok = 0; scanf("%s", &url); CURL *session = curl_easy_init(); /*Initialisation de la session */ curl_easy_setopt(session, CURLOPT_URL, url); /*Ici on précise l'url */ curl_easy_setopt(session, CURLOPT_WRITEDATA, stdout); //On fait semblant d'avoir un fichier curl_easy_setopt(session, CURLOPT_WRITEFUNCTION, &buffer_write); //On passe notre fonction curl_easy_perform(session); printf( "Ce programme trouve une sous-chaine comprise entre les chaines %s et %s.\n\n", debut, fin ); printf( "Ecrivez un texte de la forme : \n[...] %s [...] %s [...] (Maximum %i caracteres)\n", debut, fin, TAILLE_CHAINE_MAX ); // Tant que le caractère saisi n'est pas un saut de ligne et qu'on n'a pas atteint // le nombre de caractères maximum, on lit et on enregistre dans le tableau. while ( buffer[50000] != '\n' && u<TAILLE_CHAINE_MAX-1 ) { ++u; scanf("%c", &buffer[50000]); } if ( u < TAILLE_CHAINE_MAX-1 ) { buffer[50000] = '\0'; } u = 0; while ( u < strlen( buffer ) && ok == 0 ) { // Si on trouve debut dans la chaine saisie if ( strncmp( buffer[50000], debut, taille ) == 0 ) { u = u + taille; taille = strlen( fin ); // On cherche maintenant la chaine fin while ( u < strlen( buffer ) ) { sous_chaine[indice] = buffer[50000]; // Si on trouve la chaine fin... if ( strncmp( buffer[50000], fin, taille ) == 0 ) { // ...on enregistre l'indice sous_chaine[indice] = '\0'; // ...on sort ok = 1; break; } ++u; ++indice; } } ++u; } if ( ok == 1 ) for (u=0; u<offset; u++) printf("%c", buffer[u]); printf( "La sous-chaine trouvee est : '%s'.\n", sous_chaine ); else printf( "Aucune sous-chaine trouvee.\n" ); scanf ( "%c", &y); curl_easy_cleanup(session); /*Enfin, on libère nos ressources utilisées */ return 0; }
bizu53
Messages postés
1274
Date d'inscription
samedi 30 août 2008
Statut
Membre
Dernière intervention
21 juin 2015
860
30 oct. 2008 à 23:31
30 oct. 2008 à 23:31
Si tu oublies de coller ton code qui ne fonctionne pas correctement ça va être difficile
EL barto !
Messages postés
121
Date d'inscription
samedi 25 octobre 2008
Statut
Membre
Dernière intervention
7 août 2009
6
30 oct. 2008 à 23:35
30 oct. 2008 à 23:35
En fait il est fait à partire de 2 programmes :
le prog 1 : permet de lire le code source d'une page web et de l'afficher dans un fenêtre d'execution mais NE LE TELECHAGRE PAS ! Il ne fait que le lire.
le prog 2 : sert à repérer toutes les 'sous_chaine' ( c'est à dire l'adresse des liens' compris entre les caractère 'a href=' et ' " '.
si vous n'y comprenez rien, je peux vous poster les deux programmes qui marchent séparément (ça je suis sûr qu'il marchent, je les ai testé).
Qu'en pensez vous ? peut être que ça serait mieu pour que vous puissiez juger non ?
le prog 1 : permet de lire le code source d'une page web et de l'afficher dans un fenêtre d'execution mais NE LE TELECHAGRE PAS ! Il ne fait que le lire.
le prog 2 : sert à repérer toutes les 'sous_chaine' ( c'est à dire l'adresse des liens' compris entre les caractère 'a href=' et ' " '.
si vous n'y comprenez rien, je peux vous poster les deux programmes qui marchent séparément (ça je suis sûr qu'il marchent, je les ai testé).
Qu'en pensez vous ? peut être que ça serait mieu pour que vous puissiez juger non ?
bizu53
Messages postés
1274
Date d'inscription
samedi 30 août 2008
Statut
Membre
Dernière intervention
21 juin 2015
860
30 oct. 2008 à 23:44
30 oct. 2008 à 23:44
J'ai pas testé ton code mais j'ai bien tout lu, je ne suis pas une machine donc je me trompe peut-être mais il n'y a rien qui me titille dans ton code.
Es-tu sûr que le "téléchargement" du code source de la page se fait bien ? As-tu vérifié avec un printf("%s", buffer); ?
edit : j'ai parlé trop vite, tu utilises une variable globale, il n'y a rien de mal mais c'est généralement déconseillé tant que ce n'est pas une constante. Es-tu sûr que les valeurs qu'offset devrait contenir sont les bonnes ?
Es-tu sûr que le "téléchargement" du code source de la page se fait bien ? As-tu vérifié avec un printf("%s", buffer); ?
edit : j'ai parlé trop vite, tu utilises une variable globale, il n'y a rien de mal mais c'est généralement déconseillé tant que ce n'est pas une constante. Es-tu sûr que les valeurs qu'offset devrait contenir sont les bonnes ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
EL barto !
Messages postés
121
Date d'inscription
samedi 25 octobre 2008
Statut
Membre
Dernière intervention
7 août 2009
6
30 oct. 2008 à 23:52
30 oct. 2008 à 23:52
Oui, ça marche mais dans une page autonome.
En fait ce n'est pas un téléchargement. tiens je te colle, son code. en fait si il y a un erreure ça doit être dans la fusion des deux programmes. VOici, le code qui permet de LIRE :
</code>
J'ai di commettre des erreure en essayant de des les intégrer l'un à l'autre, car il y a des variable qui avait le même non. dans la version que je t'ai envoyé, ça bloque à la ligne
int u = 0;
En fait ce n'est pas un téléchargement. tiens je te colle, son code. en fait si il y a un erreure ça doit être dans la fusion des deux programmes. VOici, le code qui permet de LIRE :
#include <windows.h> #include <stdlib.h> #include <curl/curl.h> #include <stdio.h> //Variables globales char buffer[50000]; int offset = 0; /*là c'est la définition de la fontion buffer_write pour allouer la bonne taille au buffer*/ size_t buffer_write (const void *ptr, size_t size, size_t nmemb, FILE *stream) { int i; char *myptr = (char *) ptr; for (i=0; i < size * nmemb; i++) { if (i + offset >= sizeof(buffer)) break; buffer[i + offset] = myptr[i]; offset++; } return size * nmemb; } /*là c'est l'ouverture de la séssion vers l'url, et la lecture grâce à la fonction buffer_write*/ int main(int argc, char **argv) { char url[1024]; int i; scanf("%s", &url); CURL *session = curl_easy_init(); /*Initialisation de la session */ curl_easy_setopt(session, CURLOPT_URL, url); /*Ici on précise l'url */ curl_easy_setopt(session, CURLOPT_WRITEDATA, stdout); //On fait semblant d'avoir un fichier curl_easy_setopt(session, CURLOPT_WRITEFUNCTION, &buffer_write); //On passe notre fonction curl_easy_perform(session); curl_easy_cleanup(session); /*Enfin, on libère nos ressources utilisées */ for (i=0; i<offset; i++) printf("%c", buffer[i]); getchar(); return 0; } et maintenant voilà lautre prgramme qui permet d'identifier la chaine de caractère appelé sous_chaine, et qui se définie comme se situant toujours entre les chaines "<a href=" et ' " '. <code> #include <windows.h> #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int y; const int TAILLE_CHAINE_MAX = 555; char * debut = "<a href=\""; char * fin = "\""; char chaine[TAILLE_CHAINE_MAX]; chaine[0] = -1; chaine[TAILLE_CHAINE_MAX-1] = '\0'; char sous_chaine[TAILLE_CHAINE_MAX]; int u = 0; int indice = 0; int taille = strlen( debut ); int ok = 0; printf( "Ce programme trouve une sous-chaine comprise entre les chaines %s et %s.\n\n", debut, fin ); printf( "Ecrivez un texte de la forme : \n[...] %s [...] %s [...] (Maximum %i caracteres)\n", debut, fin, TAILLE_CHAINE_MAX ); // Tant que le caractère saisi n'est pas un saut de ligne et qu'on n'a pas atteint // le nombre de caractères maximum, on lit et on enregistre dans le tableau. scanf("%c", &chaine[u]); while ( chaine[u] != '\n' && u<TAILLE_CHAINE_MAX-1 ) { ++u; scanf("%c", &chaine[u]); } if ( u < TAILLE_CHAINE_MAX-1 ) { chaine[u] = '\0'; } u = 0; while ( u < strlen( chaine ) && ok == 0 ) { // Si on trouve debut dans la chaine saisie if ( strncmp( &chaine[u], debut, taille ) == 0 ) { u = u + taille; taille = strlen( fin ); // On cherche maintenant la chaine fin while ( u < strlen( chaine ) ) { sous_chaine[indice] = chaine[u]; // Si on trouve la chaine fin... if ( strncmp( &chaine[u], fin, taille ) == 0 ) { // ...on enregistre l'indice sous_chaine[indice] = '\0'; // ...on sort ok = 1; break; } ++u; ++indice; } } ++u; } if ( ok == 1 ) printf( "La sous-chaine trouvee est : '%s'.\n", sous_chaine ); else printf( "Aucune sous-chaine trouvee.\n" ); scanf ( "%c", &y); return 0; }
</code>
J'ai di commettre des erreure en essayant de des les intégrer l'un à l'autre, car il y a des variable qui avait le même non. dans la version que je t'ai envoyé, ça bloque à la ligne
int u = 0;
bizu53
Messages postés
1274
Date d'inscription
samedi 30 août 2008
Statut
Membre
Dernière intervention
21 juin 2015
860
30 oct. 2008 à 23:59
30 oct. 2008 à 23:59
Je sais bien, j'appelle ça "télécharger" quand même à partir du moment où tu obtiens le code source de la page. J'ai déjà utilisé plusieurs fois cette libraire libcurl ;-).
Je viens de remarquer quelque chose qui peut avoir son importance mais je ne sais pas si ça vient de là.
Ton buffer ne fait "que" 50000. Ce qui est peu pour une page web. Par exemple, ce sujet (au moment où j'écris ce message) fait 112 542 octets. Dans mes programmes je fais un
Je viens de remarquer quelque chose qui peut avoir son importance mais je ne sais pas si ça vient de là.
Ton buffer ne fait "que" 50000. Ce qui est peu pour une page web. Par exemple, ce sujet (au moment où j'écris ce message) fait 112 542 octets. Dans mes programmes je fais un
char *source = malloc(500000);. Si, dans les pages que tu testes, les liens sont après le 50millième caractère, tu ne les auras pas dans ton buffer.
EL barto !
Messages postés
121
Date d'inscription
samedi 25 octobre 2008
Statut
Membre
Dernière intervention
7 août 2009
6
31 oct. 2008 à 00:03
31 oct. 2008 à 00:03
En fait je n'arrive même pas à tester puisque le compilo s'arrête à la ligne :
int u = 0;
le prg ne se lance tout simplement pas.
int u = 0;
le prg ne se lance tout simplement pas.
bizu53
Messages postés
1274
Date d'inscription
samedi 30 août 2008
Statut
Membre
Dernière intervention
21 juin 2015
860
31 oct. 2008 à 00:31
31 oct. 2008 à 00:31
En effet, je n'avais pas fait attention, tu fais des affectations avant. En langage C les déclarations précèdent toute instruction.
Descends ces 2 lignes sous ta dernière déclaration de variable.
chaine[0] = -1; chaine[TAILLE_CHAINE_MAX-1] = '\0';
Descends ces 2 lignes sous ta dernière déclaration de variable.
EL barto !
Messages postés
121
Date d'inscription
samedi 25 octobre 2008
Statut
Membre
Dernière intervention
7 août 2009
6
31 oct. 2008 à 00:46
31 oct. 2008 à 00:46
dans quels programme tu regardes ?
J'ai beau me crever les yeux ( :) ) je ne trouve pas les deux bout de code que tu m'a signalé ?
Es tu sûr que tu regardes dans la première version ( la version totale que j'ai envoyé des mon second message) ?
J'ai beau me crever les yeux ( :) ) je ne trouve pas les deux bout de code que tu m'a signalé ?
Es tu sûr que tu regardes dans la première version ( la version totale que j'ai envoyé des mon second message) ?
bizu53
Messages postés
1274
Date d'inscription
samedi 30 août 2008
Statut
Membre
Dernière intervention
21 juin 2015
860
31 oct. 2008 à 01:06
31 oct. 2008 à 01:06
C'est sûr que si tu te les crèves tu ne vas pas trouver ^^
char * debut = "<a href=\"";
char * fin = "\"";
char buffer[TAILLE_CHAINE_MAX];
buffer[50000] = -1;
buffer[TAILLE_CHAINE_MAX-1] = '\0';
char sous_chaine[TAILLE_CHAINE_MAX];
Dans tous tes bouts de codes ces lignes sont présentes
char * debut = "<a href=\"";
char * fin = "\"";
char buffer[TAILLE_CHAINE_MAX];
buffer[50000] = -1;
buffer[TAILLE_CHAINE_MAX-1] = '\0';
char sous_chaine[TAILLE_CHAINE_MAX];
Dans tous tes bouts de codes ces lignes sont présentes
EL barto !
Messages postés
121
Date d'inscription
samedi 25 octobre 2008
Statut
Membre
Dernière intervention
7 août 2009
6
31 oct. 2008 à 01:09
31 oct. 2008 à 01:09
OK merci !
ça y 'est je les vois !
Donc ces deux lignes en gras je devrais les mettre où exactement ?
et puis si tu n'y vois pas d'inconvenient je crois que je vais arrêter la pour aujourd'hui.
tu es présent sur le forum demain ?
ça y 'est je les vois !
Donc ces deux lignes en gras je devrais les mettre où exactement ?
et puis si tu n'y vois pas d'inconvenient je crois que je vais arrêter la pour aujourd'hui.
tu es présent sur le forum demain ?
bizu53
Messages postés
1274
Date d'inscription
samedi 30 août 2008
Statut
Membre
Dernière intervention
21 juin 2015
860
31 oct. 2008 à 13:46
31 oct. 2008 à 13:46
tu les places sous la dernière déclaration
bah je passe souvent sur le forum ouais, dès que je m'emmerde.
bah je passe souvent sur le forum ouais, dès que je m'emmerde.
EL barto !
Messages postés
121
Date d'inscription
samedi 25 octobre 2008
Statut
Membre
Dernière intervention
7 août 2009
6
31 oct. 2008 à 14:59
31 oct. 2008 à 14:59
Non, ça ne fait rien.
ça bloque toujours à la même ligne
ça bloque toujours à la même ligne
bizu53
Messages postés
1274
Date d'inscription
samedi 30 août 2008
Statut
Membre
Dernière intervention
21 juin 2015
860
31 oct. 2008 à 15:05
31 oct. 2008 à 15:05
J'aimerais bien savoir ce que te dit ton compilateur comme erreur à cette ligne alors (parce que je n'ai pas d'erreur moi..)
EL barto !
Messages postés
121
Date d'inscription
samedi 25 octobre 2008
Statut
Membre
Dernière intervention
7 août 2009
6
31 oct. 2008 à 15:09
31 oct. 2008 à 15:09
En fait( une précision), je ne sias pas si tu as remarqué, mais dans la version complète, j'ai remplacé tout les i par des u (istoire qu'il n'y ai aucune confusion de variable, cela ne concerne évidemnt que les i du prog servant la création du buffer.
Et bien le compilo (il s'agit de dev ++) ne dit que :
in function main
lorsqu'il s'arrête à la ligne:
int u = 0;
Et bien le compilo (il s'agit de dev ++) ne dit que :
in function main
lorsqu'il s'arrête à la ligne:
int u = 0;
bizu53
Messages postés
1274
Date d'inscription
samedi 30 août 2008
Statut
Membre
Dernière intervention
21 juin 2015
860
31 oct. 2008 à 15:14
31 oct. 2008 à 15:14
J'utilise Dev-c++ (et Visual Studio 2005 Édition Professionnelle lorsque je dois débugger).
Dev-c++ ne me donne pas d'erreur de mon côté, tu dois avoir des options de compilations différentes des miennes. Lorsque le compilo s'arrête à une ligne il dit l'erreur (en anglais). C'est avec l'erreur qu'on trouve, pas avec la ligne simplement (sauf dans les cas d'erreurs bêtes).
Dis-moi ce qu'il te dit dans la colonne "Message" à l'arrêt à la ligne int u = 0;
Dev-c++ ne me donne pas d'erreur de mon côté, tu dois avoir des options de compilations différentes des miennes. Lorsque le compilo s'arrête à une ligne il dit l'erreur (en anglais). C'est avec l'erreur qu'on trouve, pas avec la ligne simplement (sauf dans les cas d'erreurs bêtes).
Dis-moi ce qu'il te dit dans la colonne "Message" à l'arrêt à la ligne int u = 0;
EL barto !
Messages postés
121
Date d'inscription
samedi 25 octobre 2008
Statut
Membre
Dernière intervention
7 août 2009
6
31 oct. 2008 à 15:15
31 oct. 2008 à 15:15
non c'est plutôt l'inverse je veux dire, j'ai changé tou les i en u pour la fonction qui reconnait la sous chaine.
une fois encore sir tu essaye les deux programme séparément il marchent. Mais c'est dans la version où je les ai mis dans la même feuille de code que ça ne marche pas.
une fois encore sir tu essaye les deux programme séparément il marchent. Mais c'est dans la version où je les ai mis dans la même feuille de code que ça ne marche pas.
bizu53
Messages postés
1274
Date d'inscription
samedi 30 août 2008
Statut
Membre
Dernière intervention
21 juin 2015
860
31 oct. 2008 à 15:18
31 oct. 2008 à 15:18
olala je crains le pire ... aurais-tu 2 fonctions main() dans ton fichier .c ?
Pourrais-tu joindre ton fichier .c qui pose problème là : https://www.cjoint.com/ et me transmettre le lien pour que je vois ça ?
Pourrais-tu joindre ton fichier .c qui pose problème là : https://www.cjoint.com/ et me transmettre le lien pour que je vois ça ?
EL barto !
Messages postés
121
Date d'inscription
samedi 25 octobre 2008
Statut
Membre
Dernière intervention
7 août 2009
6
31 oct. 2008 à 15:18
31 oct. 2008 à 15:18
J'ai la version 4.9.9.2 de dev ++
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
31 oct. 2008 à 15:19
31 oct. 2008 à 15:19
ça doit etre parce que tu declare deux fois u...
le deuxieme ça serait plutot u=0 je pense
int main(int argc, char *argv[]) { char url[1024]; int u; // <-----------------------ICI int y; const int TAILLE_CHAINE_MAX = 55555; char * debut = "<a href=\""; char * fin = "\""; char buffer[TAILLE_CHAINE_MAX]; buffer[50000] = -1; buffer[TAILLE_CHAINE_MAX-1] = '\0'; char sous_chaine[TAILLE_CHAINE_MAX]; int u = 0; // <----------------------------- et LA int indice = 0; int taille = strlen( debut ); int ok = 0;
le deuxieme ça serait plutot u=0 je pense
bizu53
Messages postés
1274
Date d'inscription
samedi 30 août 2008
Statut
Membre
Dernière intervention
21 juin 2015
860
31 oct. 2008 à 15:22
31 oct. 2008 à 15:22
J'y avais pas fait attention en effet ^^ (mais mon compilo passe dessus)
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
>
bizu53
Messages postés
1274
Date d'inscription
samedi 30 août 2008
Statut
Membre
Dernière intervention
21 juin 2015
31 oct. 2008 à 15:24
31 oct. 2008 à 15:24
oui ça depend du compilo ;)
EL barto !
Messages postés
121
Date d'inscription
samedi 25 octobre 2008
Statut
Membre
Dernière intervention
7 août 2009
6
31 oct. 2008 à 15:23
31 oct. 2008 à 15:23
JE te remet le code sur la page de discussion, tel quel. Tu n'as qu'a le copier et le coller. (Mais je te l'avais déjà mis dès la seconde reponse). tiens. le voici texto ( je ne sais pas comment me servir de la page que tu as envoyé)
#include <windows.h> #include <stdio.h> #include <stdlib.h> #include <curl/curl.h> //Variables globales char buffer[50000]; int offset = 0; /*là c'est la définition de la fontion buffer_write pour allouer la bonne taille au buffer*/ size_t buffer_write (const void *ptr, size_t size, size_t nmemb, FILE *stream) { int i; char *myptr = (char *) ptr; for (i=0; i < size * nmemb; i++) { if (i + offset >= sizeof(buffer)) break; buffer[i + offset] = myptr[i]; offset++; } return size * nmemb; } int main(int argc, char *argv[]) { char url[1024]; int u; int y; const int TAILLE_CHAINE_MAX = 50000; char * debut = "<a href=\""; char * fin = "\""; char buffer[TAILLE_CHAINE_MAX]; char sous_chaine[TAILLE_CHAINE_MAX]; int u = 0; int indice = 0; int taille = strlen( debut ); int ok = 0; buffer[50000] = -1; buffer[TAILLE_CHAINE_MAX-1] = '\0'; scanf("%s", &url); CURL *session = curl_easy_init(); /*Initialisation de la session */ curl_easy_setopt(session, CURLOPT_URL, url); /*Ici on précise l'url */ curl_easy_setopt(session, CURLOPT_WRITEDATA, stdout); //On fait semblant d'avoir un fichier curl_easy_setopt(session, CURLOPT_WRITEFUNCTION, &buffer_write); //On passe notre fonction curl_easy_perform(session); printf( "Ce programme trouve une sous-chaine comprise entre les chaines %s et %s.\n\n", debut, fin ); printf( "Ecrivez un texte de la forme : \n[...] %s [...] %s [...] (Maximum %i caracteres)\n", debut, fin, TAILLE_CHAINE_MAX ); // Tant que le caractère saisi n'est pas un saut de ligne et qu'on n'a pas atteint // le nombre de caractères maximum, on lit et on enregistre dans le tableau. while ( buffer[50000] != '\n' && u<TAILLE_CHAINE_MAX-1 ) { ++u; scanf("%c", &buffer[50000]); } if ( u < TAILLE_CHAINE_MAX-1 ) { buffer[50000] = '\0'; } u = 0; while ( u < strlen( buffer ) && ok == 0 ) { // Si on trouve debut dans la chaine saisie if ( strncmp( buffer[50000], debut, taille ) == 0 ) { u = u + taille; taille = strlen( fin ); // On cherche maintenant la chaine fin while ( u < strlen( buffer ) ) { sous_chaine[indice] = buffer[50000]; // Si on trouve la chaine fin... if ( strncmp( buffer[50000], fin, taille ) == 0 ) { // ...on enregistre l'indice sous_chaine[indice] = '\0'; // ...on sort ok = 1; break; } ++u; ++indice; } } ++u; } if ( ok == 1 ) for (u=0; u<offset; u++) printf("%c", buffer[u]); printf( "La sous-chaine trouvee est : '%s'.\n", sous_chaine ); else printf( "Aucune sous-chaine trouvee.\n" ); scanf ( "%c", &y); curl_easy_cleanup(session); /*Enfin, on libère nos ressources utilisées */ return 0; }
EL barto !
Messages postés
121
Date d'inscription
samedi 25 octobre 2008
Statut
Membre
Dernière intervention
7 août 2009
6
31 oct. 2008 à 15:27
31 oct. 2008 à 15:27
maintenant que je remplace 'int u=0' par 'u=0', le compilateur s'arrête à cette ligne :
if ( strncmp( buffer[50000], debut, taille ) == 0 ) {
il indique encore
'in function main'
if ( strncmp( buffer[50000], debut, taille ) == 0 ) {
il indique encore
'in function main'
bizu53
Messages postés
1274
Date d'inscription
samedi 30 août 2008
Statut
Membre
Dernière intervention
21 juin 2015
860
31 oct. 2008 à 15:32
31 oct. 2008 à 15:32
Ne serait-ce pas l'adresse de ton buffer qu'il faille passer ? (je n'utilise pas cette fonction mais ça m'étonnerait pas)
if ( strncmp( buffer, debut, taille ) == 0 ) {
if ( strncmp( buffer, debut, taille ) == 0 ) {
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
31 oct. 2008 à 15:33
31 oct. 2008 à 15:33
normal le premier argument de strncmp doit etre un char * toi tu lui donne un char c'est pluto
strncmp(buffer,debut,taill)et donne nous aussi le message d'erreur que donne le compilo pas seulement ou se trouve l'erreur...
EL barto !
Messages postés
121
Date d'inscription
samedi 25 octobre 2008
Statut
Membre
Dernière intervention
7 août 2009
6
31 oct. 2008 à 15:37
31 oct. 2008 à 15:37
Bon, il s'est passé plusieurs truc.
ne bougez pas je vais chercher mon clébar qui s'est encore faufilé sous le grillage !
J'ne ai pour aproximativement 20 minutes
ne bougez pas je vais chercher mon clébar qui s'est encore faufilé sous le grillage !
J'ne ai pour aproximativement 20 minutes
EL barto !
Messages postés
121
Date d'inscription
samedi 25 octobre 2008
Statut
Membre
Dernière intervention
7 août 2009
6
31 oct. 2008 à 17:07
31 oct. 2008 à 17:07
Bon me revoilà.
non, je crois que vous n'avez pas vraiment compris comment ce programme a été construit, et c'est pour ça que vous avez du mal à "entrer" conceptuellement dans les variables.
le mieux, c'est que je vous passe les programme détaillé l'un aprés l'autre.
Ils sont assez simple à comprendre et ne font qu'une 15 n de lignes.
Quest ce que vous en pensez ?
(parce que j'ai fait vos modification, et elles m'ont amené à d'autres, et au bout du compte plus rien ne fonctionnait.)
non, je crois que vous n'avez pas vraiment compris comment ce programme a été construit, et c'est pour ça que vous avez du mal à "entrer" conceptuellement dans les variables.
le mieux, c'est que je vous passe les programme détaillé l'un aprés l'autre.
Ils sont assez simple à comprendre et ne font qu'une 15 n de lignes.
Quest ce que vous en pensez ?
(parce que j'ai fait vos modification, et elles m'ont amené à d'autres, et au bout du compte plus rien ne fonctionnait.)
bizu53
Messages postés
1274
Date d'inscription
samedi 30 août 2008
Statut
Membre
Dernière intervention
21 juin 2015
860
31 oct. 2008 à 17:44
31 oct. 2008 à 17:44
c'est ce que je disais dans un de mes messages précédents
Pourrais-tu joindre ton fichier .c qui pose problème là : https://www.cjoint.com/ et me transmettre le lien pour que je vois ça ?
Pourrais-tu joindre ton fichier .c qui pose problème là : https://www.cjoint.com/ et me transmettre le lien pour que je vois ça ?
EL barto !
Messages postés
121
Date d'inscription
samedi 25 octobre 2008
Statut
Membre
Dernière intervention
7 août 2009
6
31 oct. 2008 à 17:51
31 oct. 2008 à 17:51
Je pige pas comment elle marche la page que tu m'envoies ! :)
il me faut ton adresse non ?
c'estpas plus simple si je te poste les deux pregramme séparemment ?
il me faut ton adresse non ?
c'estpas plus simple si je te poste les deux pregramme séparemment ?
bizu53
Messages postés
1274
Date d'inscription
samedi 30 août 2008
Statut
Membre
Dernière intervention
21 juin 2015
860
31 oct. 2008 à 17:54
31 oct. 2008 à 17:54
Tu cliques juste sur parcourir pour indiquer le fichier et c'est tout .. tu cliques sur le bouton Créer le lien Cjoint
edit : c'est plus simple ouais mais ça ne va rien faire d'autre qu'allonger le sujet encore une fois pour du code quasiment similaire à tous les autres. Et puis c'est plus fiable d'avoir le fichier, plutôt qu'un copier coller (on ne sait jamais des fois que tu collerais pas le bon sans t'en apercevoir ou jsais pas quoi...)
edit : c'est plus simple ouais mais ça ne va rien faire d'autre qu'allonger le sujet encore une fois pour du code quasiment similaire à tous les autres. Et puis c'est plus fiable d'avoir le fichier, plutôt qu'un copier coller (on ne sait jamais des fois que tu collerais pas le bon sans t'en apercevoir ou jsais pas quoi...)
bizu53
Messages postés
1274
Date d'inscription
samedi 30 août 2008
Statut
Membre
Dernière intervention
21 juin 2015
860
31 oct. 2008 à 18:12
31 oct. 2008 à 18:12
bon colle-le ça ira plus vite ... ne t'embête pas
EL barto !
Messages postés
121
Date d'inscription
samedi 25 octobre 2008
Statut
Membre
Dernière intervention
7 août 2009
6
31 oct. 2008 à 18:25
31 oct. 2008 à 18:25
Bon ok,
mais je te l'ai pourtant envoyé !!!
tu ne l'a pas recu ?
Bon voilà le PRG N°1 : connection_lecture d'un code source d'un page web :
-------------------------------------------------------------------------------------------------------------------------------------------------------
Et maintenant le PRG N°2 : recherche de la sous chaine située entre les balises "<titre>" et "<\titre>"
-------------------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------------------------------
Voilà tu as les deux programme. essaies les séparément, ils marcheront. Mais mon objectif; c'est deux faire en sorte que aprés avoir rentrer une URL , le programme final se lance cherche et m'affiche la chaine de caractère comprise entre les balises <titre> et <\titre>.
mais je te l'ai pourtant envoyé !!!
tu ne l'a pas recu ?
Bon voilà le PRG N°1 : connection_lecture d'un code source d'un page web :
#include <windows.h> #include <stdlib.h> #include <curl/curl.h> #include <stdio.h> //Variables globales char buffer[4096]; int offset = 0; /*là c'est la définition de la fontion buffer_write pour allouer la bonne taille au buffer*/ size_t buffer_write (const void *ptr, size_t size, size_t nmemb, FILE *stream) { int i; char *myptr = (char *) ptr; for (i=0; i < size * nmemb; i++) { if (i + offset >= sizeof(buffer)) break; buffer[i + offset] = myptr[i]; offset++; } return size * nmemb; } /*là c'est l'ouverture de la séssion vers l'url, et la lecture grâce à la fonction buffer_write*/ int main(int argc, char **argv) { char url[1024]; int i; scanf("%s", &url); /*là on indique l'url de la page qu'on veut lire/* CURL *session = curl_easy_init(); /*Initialisation de la session */ curl_easy_setopt(session, CURLOPT_URL, url); /*Ici on précise l'url */ curl_easy_setopt(session, CURLOPT_WRITEDATA, stdout); //On fait semblant d'avoir un fichier curl_easy_setopt(session, CURLOPT_WRITEFUNCTION, &buffer_write); //On passe notre fonction curl_easy_perform(session); curl_easy_cleanup(session); /*Enfin, on libère nos ressources utilisées */ for (i=0; i<offset; i++) printf("%c", buffer[i]); getchar(); return 0; }
-------------------------------------------------------------------------------------------------------------------------------------------------------
Et maintenant le PRG N°2 : recherche de la sous chaine située entre les balises "<titre>" et "<\titre>"
-------------------------------------------------------------------------------------------------------------------------------------------------------
#include <windows.h> #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int y; const int TAILLE_CHAINE_MAX = 555; char * debut = "<titre>"; char * fin = "<\titre>"; char chaine[TAILLE_CHAINE_MAX]; chaine[0] = -1; chaine[TAILLE_CHAINE_MAX-1] = '\0'; char sous_chaine[TAILLE_CHAINE_MAX]; int u = 0; int indice = 0; int taille = strlen( debut ); int ok = 0; printf( "Ce programme trouve une sous-chaine comprise entre les chaines %s et %s.\n\n", debut, fin ); printf( "Ecrivez un texte de la forme : \n[...] %s [...] %s [...] (Maximum %i caracteres)\n", debut, fin, TAILLE_CHAINE_MAX ); // Tant que le caractère saisi n'est pas un saut de ligne et qu'on n'a pas atteint // le nombre de caractères maximum, on lit et on enregistre dans le tableau. scanf("%c", &chaine[u]); while ( chaine[u] != '\n' && u<TAILLE_CHAINE_MAX-1 ) { ++u; scanf("%c", &chaine[u]); } if ( u < TAILLE_CHAINE_MAX-1 ) { chaine[u] = '\0'; } u = 0; while ( u < strlen( chaine ) && ok == 0 ) { // Si on trouve debut dans la chaine saisie if ( strncmp( &chaine[u], debut, taille ) == 0 ) { u = u + taille; taille = strlen( fin ); // On cherche maintenant la chaine fin while ( u < strlen( chaine ) ) { sous_chaine[indice] = chaine[u]; // Si on trouve la chaine fin... if ( strncmp( &chaine[u], fin, taille ) == 0 ) { // ...on enregistre l'indice sous_chaine[indice] = '\0'; // ...on sort ok = 1; break; } ++u; ++indice; } } ++u; } if ( ok == 1 ) printf( "La sous-chaine trouvee est : '%s'.\n", sous_chaine ); else printf( "Aucune sous-chaine trouvee.\n" ); scanf ( "%c", &y); return 0; }
-------------------------------------------------------------------------------------------------------------------------------------------------------
Voilà tu as les deux programme. essaies les séparément, ils marcheront. Mais mon objectif; c'est deux faire en sorte que aprés avoir rentrer une URL , le programme final se lance cherche et m'affiche la chaine de caractère comprise entre les balises <titre> et <\titre>.