IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Pourquoi ma fonction ne marche pas ?


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Pourquoi ma fonction ne marche pas ?
    Salut !!

    Je viens de terminer une fonction, et elle marche !
    mais je n'arrive pas à l'appliquer à tous les objet auquel je l'avais destiné.
    Cette fonction permet de retenir les chaines de caractère représentant les adresses de lien de code source d'une page web.
    iso_lien (source,sous_lien)

    une autre fonction (la même en fait mais adapté) devrait retenir les keywords du même coe source :
    iso_key (source,keywords)

    Le programme que j'ai fait à pour objectif de lire le titre, les keywords, et l'adress des liens de cette page, et de me les afficher.
    mes problème sont les suivant :
    1 je n'arrive pas à faire fonctionner la focntion pour les keywords.
    2 je n'arrive à obtenir que la première adresse de lien.

    Si qq'1 peu m'aider. super !
    (autre question quel langage faut il utiliser pour faire fonctionner des bras articulé en robotique ? )


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
     
    #include <stdlib.h>
    #include <curl/curl.h>
    #include <stdio.h>
    #include <string.h>
    /*
      FONCTION QUI ECRIS LE CODE SOURCE DE LA PAGE WEB DANS LA FENÊTRE DE COMMANDE
    */
    size_t ecrire(void *ptr, size_t size, size_t nmemb, void *stream)
    {
    	sprintf(stream, "%s%s", stream, ptr);
    	return nmemb;
    }
    /*
      FONCTION QUI TELECHARGE LE CODE SOURCE DE LA PAGE WEB
    */
    void dlwebsite(char *url, char *fichier)
    {
    	CURL *session;
    	CURLcode res;
    	fichier[500000] = '\0';
    	session = curl_easy_init();
    	curl_easy_setopt(session, CURLOPT_URL, url);
    	curl_easy_setopt(session, CURLOPT_WRITEDATA, fichier);
    	curl_easy_setopt(session, CURLOPT_WRITEFUNCTION, ecrire);
    	curl_easy_perform(session);
    	curl_easy_cleanup(session);
    }
    /*
      FONCTION QUI SELECTIONNE LES KEYWORDS
    */
    int iso_key (char* data,char*keywords )   
    {    int i=0; 
         int j;
         char * debut = "keywords\" content=\""; 
         while (j<500000)
         {data++;   
         if(*data=='k')  
    		{if (strncmp(data,debut,19)==0)
    			{data=data+19;
    			while (*data!='\"')    
    				{*keywords=*data;
    				keywords++;
    				i++;
    				data++;
    				if(*data=='\"')    
    					break;
    				}
    			}
    		}
    	if((*data=='\"' )&& (i!=0))    
    	break;
            j++;
    	}	
    return i;
    }
     
    /*
      FONCTION QUI SELECTIONNE LA SOUS CHAINE D'ADRESSE DE LIEN
    */
    int iso_lien (char* data,char*sous_lien )  
    {    int i; 
         char * debut = "<a href=\"http://";     
         while (i==0)
         {data++;   
         if(*data=='<')
    		{if (strncmp(data,debut,16)==0)
    			{data=data+16;
    			while (*data!='\"')
    				{*sous_lien=*data;
    				sous_lien++;
    				i++;
    				data++;
    				if(*data=='\"')
    					break;
    				}
    			}
    		}
    	if((*data=='\"' )&& (i!=0))
    	break;
    	}	
    return i;
    }
    /*
      FONCTION QUI DOIT RETENIR LA CHAINE DE TITRE
    */
    int iso_chaine (char* data,char*sous_chaine )  
    {    int i=0; 
         char * debut = "<title>";
         char * fin = "<\title>";
         while (i==0)
         {data++;
         if(*data=='<')
    		{if (strncmp(data,debut,7)==0)
    			{data=data+7;
    			while (*data!='<')
    				{*sous_chaine=*data;
    				sous_chaine++;
    				i++;
    				data++;
    				if(*data=='<')
    					if (strncmp(data,fin,8)==0) 
    						break;
    				}
    			}
    		}
    	if (strncmp(data,fin,8)==0) 
    	break;
    	}	
    return i;	
    }
     
    int main()
    {   int i,u,v,k;
        char *source = (char*)malloc(500000*sizeof(char));
        char url[256];
        char sous_lien[12];
        char sous_chaine[255];
        char keywords[200];
        char nmemb;
        printf ("Entrer l adresse du site qu il faut analyser...\n");
        scanf("%s",url);
     
    	dlwebsite(url, source);
        v=iso_chaine (source,sous_chaine);
    	printf("%s\n", sous_chaine);
        k=iso_key (source,keywords);
        printf ("%s\n", keywords);
        i=iso_lien (source,sous_lien);
        printf("%s\n", sous_lien);
     
        scanf("%s",&u);
        getchar();
        getchar();
    }

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    J'ai un peu testé le code, il reste qq warning à la compilation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    08-11-10.c: In function 'ecrire':
    08-11-10.c:11: warning: format '%s' expects type 'char *', but argument 3 has type 'void *'
    08-11-10.c:11: warning: format '%s' expects type 'char *', but argument 4 has type 'void *'
    08-11-10.c: At top level:
    08-11-10.c:9: warning: unused parameter 'size'
    08-11-10.c: In function 'dlwebsite':
    08-11-10.c:20: warning: unused variable 'res'
    08-11-10.c: In function 'main':
    08-11-10.c:123: warning: unused variable 'nmemb'
    08-11-10.c:117: warning: unused variable 'u'
    08-11-10.c:137: warning: control reaches end of non-void function
    Sinon, j'ai remarqué qu'il pouvait y avoir une erreur de segmentation quand le mot les balises cherchées étient absentes.

    Cela peut se produire quand on cherche la balise <title> alors que seule <TITLE> est présente : la balise n'est jamais trouvée, on continue donc à chercher jusquà sortir de la zone mémoire où on a le droit d'accès.

    Le même problème risque de se produire sur les chaines encodées exotiquement.

Discussions similaires

  1. pourquoi cette fonction ne marche pas?
    Par kazannova dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/04/2008, 01h59
  2. [EasyPHP] fonction mail marche pas en local
    Par sitalgerie dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 02/04/2007, 20h01
  3. pourquoi ma fonction ne marche pas?
    Par isma92 dans le forum Général JavaScript
    Réponses: 18
    Dernier message: 30/01/2007, 14h22
  4. Pourquoi mon script ne marche pas?
    Par amarcil dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 30/05/2006, 21h37
  5. Pourquoi ce trigger ne marche pas ??
    Par Le Basque dans le forum Développement
    Réponses: 4
    Dernier message: 20/09/2004, 15h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo