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
Bonjour,

VOici un programme qui lit le code source d'une page web, et est sensé repérer une balise annonçant un lien.
Il ne marche pas. Quelqu'un peut il me dire pourquoi.

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
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;
}


0
Utilisateur anonyme
30 oct. 2008 à 23:30
copie le programme ic pour que chacun puisse l'analyser!
0
bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 859
30 oct. 2008 à 23:31
Si tu oublies de coller ton code qui ne fonctionne pas correctement ça va être difficile
0
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
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 ?
0
bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 859
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 ?
0

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
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 :

#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;
0
bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 859
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
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.
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 à 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.
0
bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 859
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.

chaine[0] = -1;
chaine[TAILLE_CHAINE_MAX-1] = '\0';

Descends ces 2 lignes sous ta dernière déclaration de variable.
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 à 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) ?
0
bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 859
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
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 à 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 ?
0
bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 859
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.
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 à 14:59
Non, ça ne fait rien.

ça bloque toujours à la même ligne
0
bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 859
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..)
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: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;
0
bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 859
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;
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
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.
0
bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 859
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 ?
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:18
J'ai la version 4.9.9.2 de dev ++
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:19
ça doit etre parce que tu declare deux fois u...
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
0
bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 859
31 oct. 2008 à 15:22
J'y avais pas fait attention en effet ^^ (mais mon compilo passe dessus)
0
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
oui ça depend du compilo ;)
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: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;
}


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
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'
0
bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 859
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 ) {
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
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...
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: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
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 à 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.)
0
bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 859
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 ?
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 à 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 ?
0
bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 859
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...)
0
bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 859
31 oct. 2008 à 18:12
bon colle-le ça ira plus vite ... ne t'embête pas
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 à 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 :


#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>.
0