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

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 à 18:57
moi je comprend pas pourquoi tu modifie ton programme dans cette partie...
 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;

la tu fais bien des strncmp( &chaine[u], fin, taille ) mais dans ton code final quand tu mixe les deux programme tu fais strncmp( buffer[50000], fin, taille ) pourquoi enlevé le & ?
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 à 19:01
POUrquoi je modifie ?

ha la la :)

Si je le savais. Je pense que si je remplace chaine par buffer,

-chaine représente la chaine de caractère total dans le programe 2
-buffer représente l'espace mémoire alloué à la lecture des 50 000 caractère.

Donc je me suis dit qu'il fallait que ces deux variable n'en soit qu'une dans le programme.
Mais peut être que je ne devrait pas. TU as essayé sans modifier?
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 à 19:05
je peux pas tester ton programme j'ai pas la lib ;)
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 à 19:06
Aïe !

tu ne devrais pas sortir à poil !:)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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 à 19:08
ben j'ai pas encore eu a utiliser le C sur des page web c'est pour ça ;)
mais essaye et tu verras bien ça change quelquechose
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 à 21:44
En fait je ne comprends pas pourquoi tu as deux programmes. J'ai déjà fait plusieurs programmes utilisant libcurl (entre autre pour exploiter dans mes programmes des résultats des recherches sur google).

Il suffit d'une fonction qui te télécharge le code source de la page et qui te l'écrit dans un char*.
Après tu n'as qu'à parcourir ce char* dans ta main (ou dans une autre fonction appelée depuis la main).

Je ne voudrais pas que tu te décourages mais ta "while if while if", pour ma part je la trouve tellement laide que je n'ai pas envie de me pencher à fond dessus, résultat : je ne la comprends pas. Il ne faut pas oublier qu'un bon code est un code bien structuré et facilement "reprenable", et éventuellement commenté (mais ce n'est pas parce qu'on commente qu'il faut pour autant se permettre de faire du code moche).


size_t ecrire(void *ptr, size_t size, size_t nmemb, void *stream)
{
	sprintf(stream, "%s%s", stream, ptr); //concatène stream et str dans stream

	return nmemb;
}

void dlwebsite(char *url, char *source)
{
	CURL *session;
	CURLcode res;

	source[0] = '\0'; //initialisation source vide

	session = curl_easy_init();
	curl_easy_setopt(session, CURLOPT_URL, url);
	curl_easy_setopt(session, CURLOPT_WRITEDATA, source);
	curl_easy_setopt(session, CURLOPT_WRITEFUNCTION, ecrire);
	curl_easy_perform(session);
	curl_easy_cleanup(session);
}

void analyse(char *source) //éventuellement d'autres entrées
{

... je te laisse le soin d'y mettre le contenu si tu prends en considération ma présentation de code

}

int main()
{
	char *url = "https://www.google.com/?gws_rd=ssl";
	char *source = malloc(500000);

	dlwebsite(url, source);
	analyse(source);
}


et pas besoin de variables globales !

Un autre avantage d'avoir un code bien structuré en fonction est que, même quelqu'un qui n'aurait pas cette librairie pourrait se faire une petite main vite fait pour tester ta fonction sans dépendre du reste de ton code (sans avoir à faire le tri..).
0