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 :

fonction générique C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 8
    Par défaut fonction générique C
    Bonjour à tous,

    Je voulais savoir, si je peux utiliser lfind, lsearh sur des entiers ou sur des réels. Est-il possible d'utiliser ces fonctions génériques sur de char ??????

    merci de vos réponses

  2. #2
    Membre émérite Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Par défaut
    Oui bien sûr :
    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
     
    #include  <search.h>
    #include  <string.h>
    #include  <stdio.h>
    #include  <stdlib.h>
     
    int comp(const void *a, const void *b)
    {
    	const char *ia = a;
    	const char *ib = b;
     
    	return *ia!=*ib;
    }
     
    int main( void )
    {
    	char t[] = "www.developpez.net";
    	char i = 't';
    	size_t n = strlen(t);
    	char *ret;
     
    	if( (ret=lfind(&i, t, &n, sizeof *t, comp))!=NULL)
    	{
    		printf("'%c' position %d\n", *ret, ret-t);
    	} else {
    		puts("Aucune correspondance trouvée");
    	}
     
    	return 0;
    }

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 8
    Par défaut
    Merci beaucoup ssmario2 un bout de code vaut tjrs mieux qu'un long discours

    J'utilise Borland C++ et ton code ne passe pas. Tu crois que ca vient de mon compilateur ? Tu utilise quoi toi ? merci

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    Bonsoir,
    Citation Envoyé par Troubadour Voir le message
    J'utilise Borland C++ et ton code ne passe pas. Tu crois que ca vient de mon compilateur ?
    Quel message d'erreur te renvoi ton compilateur ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 8
    Par défaut
    voici ce qu'il me dit

    cannot convert const void* to const char *
    cannot convert const void* to const char *
    parameter a is never used
    parameter b is never used
    cannot convert void* to char *
    n is assigned a value that is never used
    i is assigned a value that is never used

  6. #6
    Membre émérite Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Par défaut
    Tu compiles en C++, vérifies que ton fichier porte bien l'extension .c et que tu compile en C !

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 8
    Par défaut
    ok ok ca marche d'enfer merci . Peux tu m'expliquer exatement comment ca se passe dans la fonction comp ? *ia= a etc merci

  8. #8
    Membre émérite Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Par défaut
    Rien de méchant c'est juste que tu ne peux pas déréférencer un void* et écrire directement :
    j'ai choisi donc de créer deux variables avec le type adéquat et les initialiser, mais j'aurais pu faire sans comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return *(const char*)a != *(const char*)b;
    c'est moche, mais plus compacte.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 8
    Par défaut
    oki oki super merci pour ton explication

    si je fais mon code comme ceci j'ai char (*) dans l'appel de la fonction et ca ne merche pas en revanche si je mets int(*) ca marche. Quelqu'un peut me dire a quoi sert exactement ce parametre ? merci d'avance

    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
    #include  <search.h>
    #include  <string.h>
    #include  <stdio.h>
    #include  <stdlib.h>
     
    int comp(char *a,char *b)
    {
    	return (*a != *b);
    }
     
    int main( void )
    {
    	char t[] = "www.developpez.net";
    	char i = 't';
    	size_t n = strlen(t);
    	char *ret;
     
    	if( (ret = lfind(&i,t,&n,sizeof(t),(char (*) (const void*, const void*)) comp))!=NULL)
    	{
    		printf("'%c' position %d\n", *ret, ret-t);
    	} else {
    		puts("Aucune correspondance trouvée");
    	}
     
       system("PAUSE");
     
    	return 0;
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. fonction générique PL SQL
    Par nathieb dans le forum SQL
    Réponses: 1
    Dernier message: 27/09/2007, 17h28
  2. [AJAX] [vos avis] fonction "générique" pour les requetes
    Par gorgonite dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 18/07/2007, 19h40
  3. fonction générique pour get set et change
    Par tretsois dans le forum C++
    Réponses: 9
    Dernier message: 18/02/2007, 18h28
  4. [VB.Net] fonctions génériques pour le new
    Par ohcysp dans le forum Windows Forms
    Réponses: 3
    Dernier message: 11/09/2006, 11h47
  5. Fonctions génériques et listes
    Par DevloNewb' dans le forum C++
    Réponses: 6
    Dernier message: 13/01/2006, 14h47

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