Bonjour,
J'ai le soucis suivant : j'ai une fonction qui prend en paramètre un void *. Pour le moment, je lui passe une chaine de caractere, qui contient des paramètres que je lis dans la fonction avec sscanf :
Mon soucis : je souhaite maintenant passer un pointeur, toujours via chaine. J'ai bien pensé à utiliser le formateur %p, mais j'ai une segmentation fault lors de la lecture...
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 void fun (void * chaine) { //... ret = sscanf (chaine, "%d %d %42s", &a, &b, str); //... } // Appel : int main (void) { //.... sprintf (chaine, "%d %d %s", a, b, c); fun (chaine); //...
Je sais que je pourrai passer par une structure contenant le pointeur et la chaine (et caster le tout en void *), mais ca ferait trop de changements dans le projet pour que je puisse le faire sereinement.
Donc est-ce qu'il existe une possibilité de passer un pointeur, et de le récupérer correctement dans ma fonction ?
SSCCE qui plante (segfault) [i est là pour faire joli, il ne sert à rien dans ce code]:
Merci de vos solutions.
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 #include <stdio.h> #include <stdlib.h> void f (char * chaine) { FILE * test = NULL; int ret; int i; ret = sscanf (chaine, "chaine %p %d", test, &i); printf ("ret : %d, adresse %p, i %d\n", ret, test, i); } int main (void) { FILE * toto = NULL; int ret; int i = 42; char chaine[42] = {0}; int lg_chaine = 42; toto = fopen ("/tmp/test_toto", "a"); if (toto == NULL) { printf ("error or fopen\n"); return EXIT_FAILURE; } else { snprintf (chaine, lg_chaine, "chaine %p %d", toto, i); printf ("adresse avant : %p\n", toto); f (chaine); printf ("adresse apres : %p\n", toto); ret = EXIT_SUCCESS; } return ret; }
Partager