本当に理解できない問題があります。私は初心者の 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++;
}
}
そして、私には2つの問題があります:
- まず、文字列へのポインターの配列を で作成すると
filetostr
、機能しますが、テキストの途中で 2 行が繰り返されます (配列にはそれらへの参照が 2 つあるため、printext
2 回出力されます)。そんなことがあるものか?malloc の呼び出しが間違っていませんか? - 次に、先ほど述べた行を XOR しようとすると、XORred が 1 回しか得られないため、重複行ごとに XORred 行と通常の行が作成されます。