Salut les C,
Je débute en C et je suis en train d'affûter mes pointeurs mais je bute sur un problème dont je ne connais pas la source:
Le programme prend un mot comme argument et vous invite a taper ce que vous désirez et vous donne en réponse si le mot est présent dans votre entrée et à quel index.
Le problème est que cela fonctionne une fois voire deux suite a quoi j'ai détecter grâce a des printf() que la valeur de l'argument argv[1], donc le mot a rechercher, se retrouve modifier et je suppose que c'est a cause de mes fonctions mais je ne voit vraiment pas pourquoi sauf si c'est la faute des pointeurs dans mon code.
Le programme est plus un exercice avec les pointeurs de tableau (oups pardon) et argv.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6mon_prog.exe test deteste pattern present at index: 2 fatest test ^Z
Dont voici le code:
Sûrement que la réponse a ma question est simplement que comme je me sert de pointeurs la valeurs de argv[1] est modifier mais j'aimerai une confirmation ou plutôt une précision.
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 #include <stdio.h> #include <string.h> #define MAXLINESIZE 5000 int get_pos(char s[],char t[],int i) ; int get_index(char s[],char t[],int i) ; main(int argc, char *argv[]) { int c =0 ; char res[MAXLINESIZE] ; char *to_cmp=argv[1] ; /* la valeur a comparer se déforme */ while (fgets(res,MAXLINESIZE,stdin) != NULL ) { c++ ; /* * printf("%s\n",res) * printf("%s\n",argv[1]) La valeur de argv[1] se déforme lexicographiquement */ if (strstr(res, to_cmp)) { int i=0 ; int idx ; idx=get_pos(res,to_cmp,i) ; printf("pattern present at index: %d\n",idx) ; } } } int get_pos(char s[],char t[],int i) { int bool = 0 ; for( ; *s != *t ; i++,*s++) { ; /* sauter les lettres non inclus dans le motif */ } bool = get_index(s,t,i) ; return i ; } int get_index(char s[],char t[],int i) { int c; *s=s[i] ; /* pb ? le pointeur est initialiser a l'intérieur de la fonction */ *t= t[i] ; /* pb ? le pointeur est initialiser a l'intérieur de la fonction */ for( c=0 ; *s == *t ; c++,*s++,*t++) { if ((strlen(t)) == c+1) { return c ; /* vérification si le mot est bien entièrement correspondant */ } } }
Merci pour vos réponses éclairés.
Partager