Bonjour à tous,

Je viens d'intégrer un IUT informatique en année spéciale, et je débute le C. Pour m'amuser (et m'entrainer) je me suis lancé dans l'écriture d'un programme de cryptage de données par la méthode du Chiffre de César (cryptage par décalage) qui consiste à décaler de x lettres chaque lettre. Petit exemple, on décale de 1 : "Salut" -> "Tbmvu" etc.

Je rencontre un petit soucis au niveau des arguments de la fonction main, mon but est d'entrer en paramètres la clef de cryptage (1,2,3 ...) et le mot à crypter (SALUT...). J'aurai plus de mal à expliquer la source de mon problème que le compilateur. Voilà le code, si quelqu'un saurait d'où vient le problème, je lui crypte son pseudo gratuitement !

Le compilateur renvoi "main.c|120|error: assignment to expression with array type|" . Pourtant ce sont deux chaines de caractères !

Cordialement,
Haz

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
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
#include <stdio.h>
#include <stdbool.h>
 
const char alphabet[26] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
 
 
bool isUpperCase (char message[]) {
  bool up = true;
  char c = message[0];
  int i = 0;
 
  while (up && c != '\0') {
    if (c != ' ') {
      int y = 0;
      bool isAlph = false;
 
      char alph = alphabet[0];
      while (!isAlph && alph != 0) {
        alph = alphabet[y];
        if (alph == c){
          isAlph = true;
        }
        y++;
      }
 
      if (!isAlph){
        up = false;
      }
    }
 
    i++;
    c = message[i];
  }
 
  return up;
}
 
 
int indexC (char c) {
  int ind = -1;
  bool isOK = false;
 
  while (!isOK) {
    ind++;
    if (c == alphabet[ind]) {
      isOK = true;
    }
  }
 
  return ind;
}
 
 
void chiffreCesar (char message[], int clef) {
  int i = 0;
  char c = message[0];
 
  while (c != '\0') {
    if (c != ' ') {
      int indexNewC = (indexC(c)+clef)%26;
      message[i] = alphabet[indexNewC];
    }
 
    i++;
    c = message[i];
  }
 
}
 
 
int power (int x, int n) {
  int result = 1;
  int i = 0;
 
  while (i<n) {
    result*=x;
    i++;
  }
 
  return result;
}
 
 
bool stringToInt (char chaine[], int *clef) {
  int result = 0;
  char c = chaine[0];
  int nbChar = 0;
  bool isOK = true;
 
  while (isOK && c != '0') {
    nbChar++;
    c = chaine[nbChar];
    if ('0' > c && c > '9') {
      isOK = false;
    }
  }
 
  while (isOK && nbChar > 0) {
    nbChar--;
    int val = (int)chaine[nbChar]-48;
    result += power(val,nbChar);
  }
 
  *clef = result;
  return isOK;
}
 
 
int main (int argc, char *argv[]) {
    char message[] = "Erreur";
    int clef = 0;
 
  if (argc == 3) {
    message = argv[1]; // C'est ici qu'à lieu l'accident ! *************************************************************************************
 
    if (isUpperCase(message)) {
      printf("%s est bien en majuscules !\n", message);
      chiffreCesar(message, clef);
      printf("%s est la version cryptée avec une clef qui vaut %d !\n", message, clef);
    }
    else {
      printf("%s n'est pas en majuscules !\n", message);
    }
  }
 
  else {
    printf("Veuillez indiquer deux paramètres tels que : ./cesar MOT clef\n");
  }
 
  return 0;
}