Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 12/05/2007, à 19:07

Agrou

[résolu] Problème étrange avec Curl dans un programme en C

Bonjours à tous, je cherche à faire un programme en C qui me permettra d'afficher une information récupérée sur une page web. Pour le moment je cherche simplement à afficher le source de la page et à la stocker en mémoire.

Là ou ça se gâte c'est que j'arrive à afficher le source immédiatement après l'avoir stocké. Par contre quand je cherche à faire exactement dans une autre fonction, il n'affiche plus que la fin de la page...


Voici mon petit programme...

#include <stdio.h>
#include <curl/curl.h>
#include <stdlib.h>

char * ptrbuffer;
size_t taille;

size_t buffer(void *ptr, size_t size, size_t nmemb, void *stream)
{
int i;
taille = size*nmemb;
ptrbuffer=(char*)malloc(taille);
wmemcpy(ptrbuffer,ptr,taille); //wmemcpy plus adapté que memecpy pour les caractères
for(i=0;i<taille;i++){putchar(ptrbuffer[i]);}// J'affiche la page une première fois pour tester et elle s'affiche sans problème
}

void lecture()
{
int i=0;
for(i=0;i<taille;i++){putchar(ptrbuffer[i]);printf("-");} //ma fonction lecture qui devrai me permettre d'afficher la page quand je veut, mais elle n'affiche que la fin de la page....j'ai ajouté printf("-"); pour pouvoir distinguer cet affichage de celui réalisé dans "buffer"

}

int main(void)
{
    CURL *handle;
    handle = curl_easy_init();
    curl_easy_setopt(handle, CURLOPT_URL, "www.meteo-strasbourg.net/");
    curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, buffer);
    curl_easy_perform(handle);
    curl_easy_cleanup(handle);
    lecture();
}

Voilà, si vous avez la moindre question surtout n'hésitez pas.:D

Dernière modification par Agrou (Le 15/05/2007, à 14:51)


http://linuxdansmonpc.is-a-geek.com/

« Quoi que tu fasses cela sera insignifiant, mais il est très important que tu le fasses».  Mohandas Gandhi

Hors ligne

#2 Le 12/05/2007, à 20:52

pacome

Re : [résolu] Problème étrange avec Curl dans un programme en C

Bonsoir,

Si tu avais affiché la variable taille et que tu l'avais comparé au nombre de caractères affichés ça aurait pu te mettre sur la piste: en fait ta fonction buffer est une fonction de callback, et elle est donc appelée "quand il faut", mais surtout aussi souvent que nécessaire.
Si tu rajoutes un compteur d'appel, tu constateras qu'elle est appelée plusieurs fois (16 fois chez oim):

#include <stdio.h>
#include <curl/curl.h>
#include <stdlib.h>

char *ptrbuffer;
size_t taille;
int cpt;

size_t buffer(void *ptr, size_t size, size_t nmemb, void *stream) {
  cpt++;
  int i;
...
int main(void){
...
  lecture();
  printf("cpt=%d\n", cpt);
}

Donc ton ptrbuffer est écrasé à chaque appel et te permet d'afficher "la suite", mais ne contient après coup que les caractères du dernier appel.
Si tu veux vraiment gérer ça en mémoire tu auras besoin de realloc; sinon tu peux utiliser un fichier temporaire (ouvert avant; fermé après) dans lequel la fonction peut écrire au fur et à mesure...

A+

Hors ligne

#3 Le 14/05/2007, à 23:33

Agrou

Re : [résolu] Problème étrange avec Curl dans un programme en C

Merci pour ton aide j'ai bien compris ce qui se passe. Il me reste à trouver une solution mais sa devrai aller.:D


http://linuxdansmonpc.is-a-geek.com/

« Quoi que tu fasses cela sera insignifiant, mais il est très important que tu le fasses».  Mohandas Gandhi

Hors ligne

#4 Le 15/05/2007, à 07:15

pacome

Re : [résolu] Problème étrange avec Curl dans un programme en C

Salut,

Tu peux passer le sujet à [résolu] alors. wink

A+

Hors ligne