J'ai un problème que je ne peux vraiment pas comprendre. Je suis un programmeur débutant C, et j'ai un programme qui va à peu près comme ceci:Tableaux de pointeurs sur des chaînes - C
void filetostr(FILE *, char *s[]);
void strtofile(char *s[], FILE *);
void XORstr(char *, int);
void XORtext(char *s[], int);
void printext(char *s[]);
int main(int args, char *argv[]) {
char *s[MAXLENGTH];
char ln[MAXLENGTH];
FILE *input, *xorred, *rexorred, *out;
input = fopen("input.txt", "r");
filetostr(input, s);
fclose(input);
printext(s);
XORtext(s, KEY);
}
void filetostr(FILE *fp, char *s[]) {
char ln[MAXLENGTH];
char *p;
int i = 0;
while (fgets(ln, MAXLINE, fp)) {
p = (char *) malloc(strlen(ln) * sizeof(char));
strcpy(p, ln);
s[i++] = p;
}
}
void printext(char *s[]) {
while (*s) {
printf("%s", *s);
s++;
}
}
void XORstr(char *s, int key) {
int c;
while (c = *s)
*s++ = key^c;
}
void XORtext(char *txt[], int key) {
while (*txt) {
XORstr(*txt, key);
txt++;
}
}
et j'ai deux deux problèmes:
- d'abord, quand je construis le tableau des pointeurs sur des chaînes avec
filetostr
, je l'ai fait fonctionner mais deux lignes au milieu du texte sont répétées (il y a deux références dans le tableau, ainsi avecprintext
elles sont imprimées deux fois). Comment est-ce possible? Y at-il un mauvais appel à malloc? Deuxièmement, quand j'essaye de XOR les lignes que je viens de mentionner, ils ne reçoivent XORred qu'une seule fois, donc je me retrouve avec une ligne XORred et une ligne normale pour chaque ligne dupliquée.
En outre, ne pas oublier de vérifier 1) retour -value de la fonction 'malloc()'. 'if (p == NULL) {/ * pas de mémoire */exit (1); } 'et 2) s'il y a assez d'espace pour stocker' p' dans le tableau 's'; avant de 's [i ++] = p;': 'if (i> = MAXLENGTH) {/ * pas d'espace pour contenir p dans s * /}' Il peut planter votre application. – Jack