justement c'est pas moi qui a conçu le programme (lire suite )
Version imprimable
justement c'est pas moi qui a conçu le programme (lire suite )
C'est pas moi non plus... Tu travailles sans doc ? Ce n'est pas sérieux...Citation:
Envoyé par monalisa_dulouvre
Ta capture d'écran indique que les paramètres de ton appli sont incorrects.Citation:
Envoyé par monalisa_dulouvre
Il faut lui passer un nom de fichier, et une clé.
je programme mais en java, en C je ne connait pas grand chose, si ce n'ai qu'il ressemble a java ,
mais pour repondre a ta question ce programme aetais codé par mon binom qui est partie en vaccance et moi je doit compiler ce programme pour le soumettre au prof,
l'algorithme c'est moi qu'il la conçu
et ben ce qui arrive quand on commence à programmer en java et qu'on passe enuite en C, on fait du kaka...(désolé j'attrape des boutons dès qu'on me parle du java...:mrgreen: ) rien de tel que le C pour apprendre...enfin bref!
Chez moi, sous Windows et avec Dev-C++, ça compile, il y a pas d'erreur et quand je l'execute, ça marche pour l'encodage mais par contre il y a une merde au niveau du décodage....:aie:
il me dit :Code:
1
2ERROR remaning temporary file <tempfile.õnc Data is safely processed and stored is that file
Je t'assure, c'est possible d'écrire du code propre, qui compile, et qui résoud un problème avec élégance, même lorsqu'on apprend avec Java ou Python. C est un langage pointu, car plein de subtilités. Mais je ne sais pas s'il y a une réelle relation de cause à effet entre la qualité du code et le premier langage utilisé lors de l'apprentissage... Je crois que cela dépend plutôt du temps que l'on passe et du soin que l'on apporte aux phases de spécification et de conception préliminaires au codage.Citation:
Envoyé par jeremy13
Thierry
ok je suis entierement ok mais ce programme ce n'est pas moi qu'il la fait, c'est mon binome qui est partie en vaccance
mais comme je doit avancer alors je suis entraine de refaire tous le programme a ma façon voici ce que je suis entraine de faire tu comprendra mieux
Code:
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197 /* le debut du programme de cruptage*/ int main (void) { do { initialisation(); ouverture_des_fichiers(); choix_crypt(); fermeture_des_fichiers(); recommencer(); }while (choix == 'o'); } /* mettre tous les paramettre a zero pour s'assurer que le programme point les fichiers qu'on veut crypter avec la cle qu'on va introduire*/ void initialisation(void) { char curl; for (curl=0;curl<MAX_CARAC;curl++) { nom_fichier_a_lire[curl] = 0; nom_fichier_a_ecrire[curl] = 0; password[curl] = 0; } lettre = 0; probleme_ouverture = 0; system ("CLS"); } /* ouverture de fichire et verification du contenu du fichier a crypter puis on rajoute l'extention .txt*/ void ouverture_des_fichiers (void) { printf("Saisissez le nom du fichier %c lire : ",133); scanf ("%40s",nom_fichier_a_lire); printf("\n\nSaisissez le nom du fichier o%c il faut %ccrire : ",151,130); scanf ("%40s",nom_fichier_a_ecrire); rajout_extension(nom_fichier_a_lire); rajout_extension(nom_fichier_a_ecrire); fichier_a_lire = fopen (nom_fichier_a_lire,"rt"); if (fichier_a_lire == NULL) { printf ("\n\nProbl%cme d'ouverture du fichier a lire",138); probleme_ouverture = 1; } else { fichier_a_ecrire = fopen (nom_fichier_a_ecrire,"wt"); if (fichier_a_ecrire == NULL) { printf ("\n\nProbl%cme d'ouverture du fichier o%c il faut %ccrire",151,130); probleme_ouverture = 1; } } } /* permet de rajouter l'extention .txt du nom de fichier introduit en paramettre (entrée, sortie)*/ void rajout_extension (unsigned char nom_fichier[MAX_CARAC]) { char curl,extension = 0; for (curl=0;curl<MAX_CARAC;curl++) { if (nom_fichier[curl] == 0 && extension == 0) { extension = 1; nom_fichier[curl] = '.'; nom_fichier[curl+1] = 't'; nom_fichier[curl+2]= 'x'; nom_fichier[curl+3] = 't'; } } } /* permet de faire le chois de crypter ou decrypter*/ void choix_crypt (void) { if (probleme_ouverture == 0) { printf ("\n\nVoulez vous effectuer un cryptage ou un d%ccryptage (c/d) : ",130); do { choix = getch(); rewind (stdin); }while(choix != 'c' && choix != 'd'); printf ("%c",choix); saisie_de_cle(); if (choix == 'c') cryptage(); if (choix == 'd') decryptage(); } } /* saisire la cle de cryptage*/ void saisie_de_cle (void) { char curl; printf ("\n\n\nsaisissez la cle de cryptage : "); fgets(cle, sizeof cle, stdin); size_cle = strlen(cle); for (curl=0;curl<size_cle;curl++) cle[curl] = 255 - cle[curl]; } /*saisie des caracteres dans le tableau XX (16 bits dans chaque case)*/ void saisie_du_caractere(void) { int x; unsigned XX[4],TMP[8]; for(x=1;x<=8;x++) tmp[x]=fgetc(fichier_a_lire); XX[1]=tmp[1]&tmp[2];XX[2]=tmp[3]&tmp[4];XX[3]=tmp[5]&tmp[6];XX[4]=tmp[7]&tmp[8]; fin_fichier = tmp[8]; } /*ecriture du code sur le fichier de sortie*/ void ecriture_du_code (void) { char curl; for (curl=0;curl<TRAME;curl++) fprintf(fichier_a_ecrire,"%d",OUT[curl]); } /* permet de crypter les données qui se trouve dans le fichier txt inseret dans les parametres*/ void cryptage (void) { do { saisie_du_caractere(); if (fin_fichier != 255)/* indique la fin de fichier*/ { codage(XX[5],YY[5],Z[7][10]); ecriture_du_code(); } }while(fin_fichier != 255); } /* générer les sous-cles */ void cle(short unsigned uscle[9], unsigned Z[7][10]) { short unsigned S[54]; int i,j,r; for(i=1;i<9;i++) S[i-1]=uscle[i]; for(i=8;i<54;i++) { if((i+2)%8 == 0) /* pour S[14],S[22],... */ S[i] = ((S[i-7]<<9) ^ (S[i-14]>>7)) & one; else if((i+1)%8==0) /* pour S[15],S[23],... */ S[i] = ((S[i-15]<<9) ^ (S[i-14]>>7)) & one; else S[i] = ((S[i-7]<<9) ^ (S[i-6]>>7)) & one; } /* enregister les sous-cles dans Z[][]*/ for(r=1;r<=etape+1;r++) for(j=1;j<7;j++) Z[j][r]=S[6*(r-1)+j-1]; } /* fonction de cryptage sur un bloc de 64 bits avec une cle de 128 bits*/ void codage(unsigned IN[5],unsigned OUT[5],unsigned Z[7][10]) { unsigned r,x1,x2,x3,x4,kk,t1,t2,a; x1=IN[1]; x2=IN[2]; x3=IN[3]; x4=IN[4]; for(r=1;r<=8;r++) /* les etapes */ { /* le groupe d'operation effectuer sur le bloc de 64bits */ x1 = mul(x1,Z[1][r]); x4 = mul(x4,Z[4][r]); x2 = (x2 + Z[2][r]) & one; x3 = (x3 + Z[3][r]) & one; kk = mul(Z[5][r],(x1^x3)); t1 = mul(Z[6][r],(kk+(x2^x4)) & one); t2 = (kk+t1) & one; /* la permutation */ x1 = x1^t1; x4=x4^t2; a = x2^t2; x2=x3^t1; x3=a; /* le tableau de sortie du bloc de 64bits crypter */ OUT[1] = mul(x1,Z[1][etape+1]); OUT[4] = mul(x4,Z[4][etape+1]); OUT[2] = (x3+Z[2][etape+1]) & one; OUT[3] = (x2+Z[3][etape+1]) & one; } /* la fonction de multiplication modulo 2^16+1*/ unsigned mul(unsigned a,unsigned b) { long int p; long unsigned q; if(a==0) p=maxim-b; else if(b==0) p=maxim-a; else { q=(unsigned long)a*(unsigned long)b; p=(q & one) - (q>>16); if(p<=0) p=p+maxim; } return (unsigned)(p&one); }
Citation:
Envoyé par mujigka
Je suis d'accord sur le fair qu'on peut faire du code propre avec n'importe quel language mais en utilisant le C comme langage d'apprentissage, on ne prend pas de mauvaises habitudes et on fait plus attention à certaines choses (allocation de la mémoire, passage du bon type de paramètre à une fonction....).....:D
c'est dommage d'avoir abandonner l'idée des passages d'arguments, c'était une bonne idée, propre et rapide à executer....:cry:
Sinon tu as choisi la bonne solution de tout refaire, je te souhaite bon courage et une bonne nuit....:mouarf: ....désolé si j'me moque mais hier j'ai fait ça jusque 1h du mat' donc chacun son tour....:mrgreen:
++
bonjour a tous ,
pour l'ecriture ça change rien qu'il soit enregistrer en chiffre ou caractéres (puisque la fonction de lecture récupére le fichier et peut faire la lecture des chiffres)mais j'ai changer les trois arguments, et j'ai mis 2 arguments
aprés les modifs ça donne :
mais les erreurs de compilation :Code:
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292 #include "idea.h" /*debut du programme IDEA*/ int main (void) { do { initialisation(); ouverture_des_fichiers(); choix_crypt(); fermeture_des_fichiers(); recommencer(); } while (choix == 'o'); } /* mettre tous les paramettre a zero pour s'assurer que le programme point les fichiers qu'on veut crypter avec la cle qu'on va introduire*/ void initialisation(void) { char curl; for (curl=0;curl<MAX_CARAC;curl++) { nom_fichier_a_lire[curl] = 0; nom_fichier_a_ecrire[curl] = 0; cle[curl] = 0; } lettre = 0; probleme_ouverture = 0; system ("CLS"); } /* ouverture de fichire et verification du contenu du fichier a crypter puis on rajoute l'extention .txt*/ void ouverture_des_fichiers (void) { printf("/**************************************************************************/"); printf("****************************************************************************"); printf("Saisissez le nom du fichier %c lire : ",133); scanf ("%40s",nom_fichier_a_lire); printf("\n\nSaisissez le nom du fichier o%c il faut %ccrire : ",151,130); scanf ("%40s",nom_fichier_a_ecrire); rajout_extension(nom_fichier_a_lire); rajout_extension(nom_fichier_a_ecrire); fichier_a_lire = fopen (nom_fichier_a_lire,"rt"); if (fichier_a_lire == NULL) { printf ("\n\nProbl%cme d'ouverture du fichier a lire",138); probleme_ouverture = 1; } else { fichier_a_ecrire = fopen (nom_fichier_a_ecrire,"wt"); if (fichier_a_ecrire == NULL) { printf ("\n\nProbl%cme d'ouverture du fichier o%c il faut %ccrire",151,130); probleme_ouverture = 1; } } } /* permet de rajouter l'extention .txt du nom de fichier introduit en paramettre (entrée, sortie)*/ void rajout_extension (unsigned char nom_fichier[MAX_CARAC]) { char curl,extension = 0; for (curl=0;curl<MAX_CARAC;curl++) { if (nom_fichier[curl] == 0 && extension == 0) { extension = 1; nom_fichier[curl] = '.'; nom_fichier[curl+1] = 't'; nom_fichier[curl+2]= 'x'; nom_fichier[curl+3] = 't'; } } } /* permet de faire le chois de crypter ou decrypter*/ void choix_crypt (void) { if (probleme_ouverture == 0) { printf ("\n\nVoulez vous effectuer un cryptage ou un d%ccryptage (c/d) : ",130); do { choix = getch(); rewind (stdin); }while(choix != 'c' && choix != 'd'); printf ("%c",choix); saisie_de_cle(); if (choix == 'c') cryptage(); if (choix == 'd') decryptage(); } } /*saisie des caracteres depuis le fichier source, dans le tableau XX (16 bits dans chaque case)*/ void saisie_du_caractere(void) { int i; unsigned XX[4]; unsigned tmp[8]; for(i = 0; i < 8; ++i) /* ecriture sur un tableau temporaire */ { tmp[i]=fgetc(fichier_a_lire); } for (i = 0; i < 4; ++i) { XX[i] = tmp[2*i] & tmp[2*i+1]; } } /*ecriture du code sur le fichier de sortie*/ void ecriture_du_code (unsigned OUT[4]) { char curl; for (curl=0;curl<4;curl++) fputc(fichier_a_ecrire,OUT[curl]); } /* permet de crypter les données qui se trouve dans le fichier txt inseret dans les parametres*/ void cryptage (void) { do { saisie_du_caractere(); if (fin_fichier != 255)/* indique la fin de fichier*/ { codage(XX[4],YY[4],Z[7][10]); ecriture_du_code(YY[4]); } }while(fin_fichier != 255); } /* saisire la cle de cryptage*/ void saisie_de_cle (void) { char curl; printf ("\n\n\nsaisissez la cle de cryptage : (ne depasse pas 16 caractere)"); fgets(cle, sizeof cle, stdin); size_cle = strlen(cle); for (curl=0;curl<size_cle;curl++) cle[curl] = 255 - cle[curl]; } /* générer les sous-cles depuis une cle de 128 bits*/ void cle(unsigned Z[7][10]) { short unsigned S[54]; int i,j,r; for(i=1;i<9;i++) S[i-1]=cle[i]; for(i=8;i<54;i++) { if((i+2)%8 == 0) /* pour S[14],S[22],... */ S[i] = ((S[i-7]<<9) ^ (S[i-14]>>7)) & one; else if((i+1)%8==0) /* pour S[15],S[23],... */ S[i] = ((S[i-15]<<9) ^ (S[i-14]>>7)) & one; else S[i] = ((S[i-7]<<9) ^ (S[i-6]>>7)) & one; } /* enregister les sous-cles */ for(r=1;r<=etape+1;r++) for(j=1;j<7;j++) Z[j][r]=S[6*(r-1)+j-1]; } /* fonction de cryptage sur un bloc de 64 bits avec les sous-cles Z generer*/ void codage(unsigned IN[4],unsigned OUT[5],unsigned Z[6][10]) { unsigned r,x1,x2,x3,x4,kk,t1,t2,a; x1=IN[0]; x2=IN[1]; x3=IN[2]; x4=IN[3]; for(r=0;r<8;r++) /* les etapes */ { /* le groupe d'operation effectuer sur le bloc de 64bits */ x1 = mul(x1,Z[0][r]); x4 = mul(x4,Z[3][r]); x2 = (x2 + Z[1][r]) & one; x3 = (x3 + Z[2][r]) & one; kk = mul(Z[4][r],(x1^x3)); t1 = mul(Z[5][r],(kk+(x2^x4)) & one); t2 = (kk+t1) & one; /* la permutation */ x1 = x1^t1; x4=x4^t2; a = x2^t2; x2=x3^t1; x3=a; } /* le tableau de sortie du bloc de 64bits crypter */ OUT[0] = mul(x1,Z[1][etape+1]); OUT[3] = mul(x4,Z[4][etape+1]); OUT[1] = (x3+Z[1][etape+1]) & one; OUT[2] = (x2+Z[2][etape+1]) & one; } /* la fonction de multiplication modulo 2^16+1*/ unsigned mul(unsigned a,unsigned b) { long int p; long unsigned q; if(a==0) p=maxim-b; else if(b==0) p=maxim-a; else { q=(unsigned long)a*(unsigned long)b; p=(q & one) - (q>>16); if(p<=0) p=p+maxim; } return (unsigned)(p&one); } /* Cette fonction calcule l'inverse avec l'algorithme de Euclide le plus grand commun diviseur PGCD*/ unsigned inv(unsigned xin) { long n1,n2,q,r,b1,b2,t; if(xin==0) b2=0; else { n1=maxim; n2=xin; b2=1; b1=0; do { r = (n1 % n2); q = (n1-r)/n2; if(r==0) { if(b2<0) b2=maxim+b2; } else { n1=n2; n2=r; t=b2; b2=b1-q*b2; b1=t; } } while (r!=0); } return (unsigned)b2; } /*permet de fermer le fichier*/ void fermeture_des_fichiers (void) { if (probleme_ouverture == 0) { fclose (fichier_a_lire); fclose (fichier_a_ecrire); } } /*fonction qui permet le decryptage*/ void decryptage (void) { do { saisie_de_cle(); if (fin_fichier != 255) { codage(YY,TT,DK); } }while(fin_fichier != 255); } void de_cle(unsigned Z[7][10],unsigned DK[7][10]) { int j; for(j=1;j<=etape+1;j++) { DK[1][etape-j+2] = inv(Z[1][j]); DK[4][etape-j+2] = inv(Z[4][j]); if (j==1 || j==etape+1) { DK[2][etape-j+2] = (fuyi-Z[2][j]) & one; DK[3][etape-j+2] = (fuyi-Z[3][j]) & one; } else { DK[2][etape-j+2] = (fuyi-Z[3][j]) & one; DK[3][etape-j+2] = (fuyi-Z[2][j]) & one; } } for(j=1;j<=etape+1;j++) { DK[5][etape+1-j]=Z[5][j]; DK[6][etape+1-j]=Z[6][j]; } } /*recommencer le programme*/ void recommencer (void) { printf ("\n\nVoulez vous r%ceffectuer un cryptage ou un d%ccryptage (o/n) : ",130,130); do { choix = getch(); }while(choix != 'o' && choix != 'n'); }
je l'ai compiler avec microsoft visuel C++Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 .\idea.cpp(34) : error C2109: un indice requiert un type tableau ou pointeur .\idea.cpp(38) : error C3861: 'system' : identificateur introuvable .\idea.cpp(61) : error C2664: 'fopen' : impossible de convertir le paramètre 1 de 'unsigned char [40]' en 'const char *' Les types pointés n'ont aucun rapport entre eux ; conversion nécessitant reinterpret_cast, cast de style C ou cast de style fonction .\idea.cpp(69) : error C2664: 'fopen' : impossible de convertir le paramètre 1 de 'unsigned char [40]' en 'const char *' Les types pointés n'ont aucun rapport entre eux ; conversion nécessitant reinterpret_cast, cast de style C ou cast de style fonction .\idea.cpp(101) : error C3861: 'getch' : identificateur introuvable .\idea.cpp(137) : error C2664: 'fputc' : impossible de convertir le paramètre 1 de 'FILE *' en 'int' Aucun contexte dans lequel cette conversion est possible .\idea.cpp(147) : error C2664: 'codage' : impossible de convertir le paramètre 1 de 'unsigned int' en 'unsigned int []' La conversion d'un type intégral en type pointeur nécessite reinterpret_cast, un cast de style C ou un cast de style fonction .\idea.cpp(148) : error C2664: 'ecriture_du_code' : impossible de convertir le paramètre 1 de 'unsigned int' en 'unsigned int []' La conversion d'un type intégral en type pointeur nécessite reinterpret_cast, un cast de style C ou un cast de style fonction .\idea.cpp(158) : error C2070: 'overloaded-function' : opérande sizeof non conforme .\idea.cpp(158) : error C2664: 'fgets' : impossible de convertir le paramètre 1 de 'void (__cdecl *)(unsigned int [][10])' en 'char *' Aucun contexte dans lequel cette conversion est possible .\idea.cpp(159) : error C3861: 'strlen' : identificateur introuvable .\idea.cpp(161) : error C2109: un indice requiert un type tableau ou pointeur .\idea.cpp(161) : error C2109: un indice requiert un type tableau ou pointeur .\idea.cpp(169) : error C2109: un indice requiert un type tableau ou pointeur .\idea.cpp(304) : error C3861: 'getch' : identificateur introuvable
ça c'est du code qui a été écrit sous dev-C++ et que tu essaye de compiler sous Visual C++ : plusieurs indice te trahit....8O 8O 8O c'est pas bieeennn!!:furieux:
En principe, il ne doit pas avoir de problèmes à faire cela du moment que c'est du C standard. Il peut éventuellement y avoir quelques soucis au moment de l'édition des liens si certains fichiers ont été compilés avec minGW, le compilateur utilisé par défaut par dev-C++ ou codeblocks, et d'autres avec le compilateur de microsoft.Citation:
Envoyé par jeremy13
Thierry
c'est pas une surprise que j'ai utiliser un code pour faire ce programme mais je suis obliger
bref j'ai installer DEV-C++
et voila ce qu'il donne comme erreur après compilation
Code:
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 Compilateur: Default compiler Exécution de gcc.exe... gcc.exe "\idea.c" -o "\idea.exe" -I"C:\Dev-Cpp\include" -L"C:\Dev-Cpp\lib" \idea.c: In function `initialisation': \idea.c:34: error: subscripted value is neither array nor pointer \idea.c: In function `ecriture_du_code': \idea.c:137: warning: passing arg 1 of `fputc' makes integer from pointer without a cast \idea.c:137: warning: passing arg 2 of `fputc' makes pointer from integer without a cast \idea.c: In function `cryptage': \idea.c:147: warning: passing arg 1 of `codage' makes pointer from integer without a cast \idea.c:147: warning: passing arg 2 of `codage' makes pointer from integer without a cast \idea.c:147: warning: passing arg 3 of `codage' makes pointer from integer without a cast \idea.c:148: warning: passing arg 1 of `ecriture_du_code' makes pointer from integer without a cast \idea.c: In function `saisie_de_cle': \idea.c:158: warning: passing arg 1 of `fgets' from incompatible pointer type \idea.c:159: warning: passing arg 1 of `strlen' from incompatible pointer type \idea.c:161: error: subscripted value is neither array nor pointer \idea.c:161: error: subscripted value is neither array nor pointer \idea.c: In function `cle': \idea.c:169: error: subscripted value is neither array nor pointer Exécution terminée
Ce n'est pas humain de demander à un compilateur de compiler ce code .
Il est infernal avec ses variables globales (et il y en a un paquet) dont on n'a même pas la déclaration (sont-elles cachées dans le .h pour faire bonne mesure ?)
Le compilateur (méritant et dévoué) fournit au moins des messages clairs
il s'agit apparemment de cle qui n'est pas un tableau ou un pointeur. C'est quoi ? l'identificateur d'une fonction semble t-il !Code:\idea.c:34: error: subscripted value is neither array nor pointer
indique que les paramètres de fputc sont faux. Un simple coup d'oeil à la documentation de fputc montre que l'ordre des paramètres est probablement inverséCode:
1
2 \idea.c:137: warning: passing arg 1 of `fputc' makes integer from pointer without a cast \idea.c:137: warning: passing arg 2 of `fputc' makes pointer from integer without a cast
....Citation:
Code:
1
2
3 char curl; for (curl=0;curl<4;curl++) fputc(fichier_a_ecrire,OUT[curl]);
De toute façon, corriger les erreurs de compilation ne fera pas de ce programme quelque chose de valable : il faut le réécrire de façon plus stricte et plus sérieuse.
1- supprimer les variables globales
2- utiliser des fonctions qui ne sont pas des void f(void) : leur fournir les paramètres dont elles ont besoin pour travailler
3-...
et ça ira mieux
ok j'ai suivi vos conseils j'ai supprimer les variable globale inutile et je suis entraine de de le refaire mais j'ai eu un probleme avec cette fonction:
aprés avoir compiler j'ai eu droit a cette erreur:Code:
1
2
3
4
5
6
7
8
9
10 char saisie_de_cle (void) { int i; char *c; int max_cle=17; printf ("\n\n\nsaisissez la cle de cryptage (ne depasse pas 16caractere):"); fgets(c,max_cle,stdin); return c; }
qq1 peut m'expliquer ce que veux dire cette erreur?Code:
1
2
3 \idea.c: In function `saisie_de_cle': \idea.c:125: error: syntax error before ';' token
Bonjour,
Je n'obtiens pas cette erreur avec ton code par contre j'obtiens ceci :
La première et la dernière sont graves :Citation:
test.c: In function ‘saisie_de_cle’:
test.c:10: warning: return makes integer from pointer without a cast
test.c:5: warning: unused variable ‘i’
test.c:9: warning: ‘c’ is used uninitialized in this function
- Tu retournes un pointeur mais le prototype dit que c'est un caractére normal
- Tu n'alloues pas d'espace pour l'appel de fgets
Jc
ok j'ai compris,
mais comment je doit faire pour regler ce probleme?
Il faut définir un tableau de char d'une taille suffisante, ou allouer celui-ci et stocker son adresse dans le pointeur.Citation:
Envoyé par monalisa_dulouvre
j'ai regler le probleme mais j'ai eu un autre au quelle je comprend pas comment faire voila le code:
et voila l'erreur qu'il m'affiche je crois que le probleme c'est le type des variables mais ??Code:
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 /* permet de crypter les données qui se trouve dans le fichier txt inseret dans les parametres*/ void cryptage (void) { unsigned TT[4]; do { TT[4]= saisie_du_caractere(fichier_a_ecrire); if (fin_fichier != 255)/* indique la fin de fichier*/ { ecriture_du_code(codage(TT[4],Z[7][10])); } } while(fin_fichier != 255); } /*saisie des caracteres depuis le fichier source, dans le tableau XX (16 bits dans chaque case)*/ unsigned saisie_du_caractere(FILE *fds) { unsigned XX[4]; int i; unsigned tmp[8]; for(i = 0; i < 8; ++i) /* ecriture sur un tableau temporaire */ { tmp[i]=fgetc(fds); } for (i = 0; i < 4; ++i) { XX[i] = tmp[2*i] & tmp[2*i+1]; } return XX[4]; } /*ecriture du code sur le fichier de sortie*/ void ecriture_du_code (unsigned OUT[4]) { int i; for (i=0;i<4;i++) fputc(OUT[i],fichier_a_ecrire); } /* fonction de cryptage sur un bloc de 64 bits avec les sous-cles Z generer*/ unsigned codage(unsigned IN[4],unsigned Z[7][10]) { unsigned OUT[4]; unsigned r,x1,x2,x3,x4,kk,t1,t2,a; x1=IN[0]; x2=IN[1]; x3=IN[2]; x4=IN[3]; for(r=0;r<8;r++) /* les etapes */ { /* le groupe d'operation effectuer sur le bloc de 64bits */ x1 = mul(x1,Z[0][r]); x4 = mul(x4,Z[3][r]); x2 = (x2 + Z[1][r]) & one; x3 = (x3 + Z[2][r]) & one; kk = mul(Z[4][r],(x1^x3)); t1 = mul(Z[5][r],(kk+(x2^x4)) & one); t2 = (kk+t1) & one; /* la permutation */ x1 = x1^t1; x4=x4^t2; a = x2^t2; x2=x3^t1; x3=a; } /* le tableau de sortie du bloc de 64bits crypter */ OUT[0] = mul(x1,Z[1][etape+1]); OUT[3] = mul(x4,Z[4][etape+1]); OUT[1] = (x3+Z[1][etape+1]) & one; OUT[2] = (x2+Z[2][etape+1]) & one; return OUT[4]; }
Code:
1
2
3
4
5 \idea.c: In function `cryptage': \idea.c:303: warning: passing arg 1 of `codage' makes pointer from integer without a cast \idea.c:303: warning: passing arg 2 of `codage' makes pointer from integer without a cast \idea.c:303: warning: passing arg 1 of `ecriture_du_code' makes pointer from integer without a cast
Déjà, évite d'appeler ton type uniquement unsigned, c'est vraiment sale (c'est implicitement un unsigned int).
Ton erreur signifie que tu as une fonction qui prend en paramètre des pointeurs et que tu lui donnes à manger des int.
Par exemple ici :
codage retourne un unsigned int, mais écriture_du_code prend en entrée un pointeur sur un unsigned int.... Donc ça ne va pas.Code:ecriture_du_code(codage(TT[4],Z[7][10]));
En plus, la fonction codage retourne un unsigned int, et toi, tu fais quoi :
Ce qui n'est pas le bon type.Code:return OUT[4];
Regardes à toutes les lignes où tu as les erreurs, c'est du même tonneau. :mrgreen:
Pour ta première erreur, une manière de faire serait de faire comme ça (mais c'est vraiment pas bien) :
Toi, tu veux retourner un pointeur, alors soit créer une variable static (mais faut vraiment savoir ce que tu veux faire) ou soit retourner un pointeur qui pointe vers un espace alloué.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 int* mafonction(void) { static int i[4]; return i; } void lautrefonction(int i[4]) { i[0] = 2; } int main(void) { lautrefonction(mafonction()); return 0; }
Si tu veux faire plus propre et ne pas s'embeter sur le fait que la variable soit allouée dynbamiquement ou non, passe en paramètre ton pointeur également dans la première fonction :
Comme ceci :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 void mafonction(int out[4]) { /*tu fais tes trucs sur out*/ } void lautrefonction(int i[4]) { i[0] = 2; } int main(void) { int machin[4]; mafonction(machin); lautrefonction(machin); return EXIT_SUCCESS; }