Bonjour, je vous laisse un topic sur un truc qui m'était encore jamais arrivé.... Ma boucle for se bloque!!
D'abord, voici mon code:
Le principe de la boucle est assez simple: j'ai un programme qui doit utiliser un certain nombre de paramètres, qui doivent être au nombre de 5. L'un des paramètres contient un point de montage sur une clé USB, dont le nom est inconnu. Comme certainbs noms ont des espaces " ", ils sont comptés en tant que paramètre dans la commande. Afin d'éviter cela, je cherche à détecter ces erreurs, et à reconstituer le bon nom.
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 int j=4; char* nom=NULL; char *tmp=NULL; for(i=argc-1; i>0; i--){ printf("i: %d\n", i); if(j==4){ printf("Parametre lu: %s\n", argv[i]); if(strncmp(argv[i],"/dev/",5)==0){ test_parametres(¶metres[j],argv[i]); printf("parametre defini n°%d: %s\n", j, parametres[j]); j--; printf("j: %d\n",j); } else{ } } else if(j==3){ printf("ici"); if(strncmp(argv[i],"/mnt/",5)==0){ *tmp = realloc(nom, sizeof(char*)); if(tmp!=NULL){ strcpy(tmp,nom); *nom=realloc(nom, (strlen(argv[i])+strlen(tmp)+2)); if(nom!=NULL){ strcpy(nom,argv[i]); sprintf(nom,"%s%s",tmp); free(tmp); test_parametres(¶metres[j],nom); printf("parametre defini n°%d: %s\n", j, parametres[j]); j--; printf("j: %d\n",j); } } } else{ *tmp = realloc(nom, sizeof(char*)); if(tmp!=NULL){ strcpy(tmp,nom); *nom=realloc(nom, (strlen(argv[i])+strlen(tmp)+2)); if(nom!=NULL){ strcpy(nom,argv[i]); sprintf(nom,"%s%s",tmp); printf("Construction nom: %s\n", nom); } } } } else{ free(nom); test_parametres(¶metres[j],argv[i]); printf("parametre defini n°%d: %s\n", j, parametres[j]); j--; printf("j: %d\n",j); } }
Je passe donc les paramètres en sens inverse pour trouver:
- la caméra, dont le nom commence par /dev
- le point de montage, dont le nom commence par /mnt
Comme les paramètres sont ordonnés, je sias que si le paramètre 3 ne commence pas par /mnt, c'est qu'il y a des paramètres passés qui n'en sont pas, et je cherche à reconstituer le nom.
Le problème est le suivant:
La boucle se lance, il récupère le paramètre 4, décrémente le compteur à 3 pour trouver le point de montage.... Et au lieu de rentrer dans le cas
Pour commencer la reconstitution, la boucle s'arrete là..... Il y a un printf pour vérifier si la boucle continue, mais queneni!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 else if(j==3)
Et comme pour le moment le main ne contient que ca, la console rend la main!!
Des idées pour ce problème bizarre??
Si quelqu'un a une idée
Partager