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
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
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; }
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
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
Tu compiles en C++, vérifies que ton fichier porte bien l'extension .c et que tu compile en C !
ok ok ca marche d'enfer merci. Peux tu m'expliquer exatement comment ca se passe dans la fonction comp ? *ia= a etc merci
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 *a!=*b;
c'est moche, mais plus compacte.
Code : Sélectionner tout - Visualiser dans une fenêtre à part return *(const char*)a != *(const char*)b;
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; }
Partager