我有一个我真的无法理解的问题。我是一个新手 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++;
}
}
我有两个两个问题:
- 首先,当我用 构建指向字符串的指针数组时
filetostr
,我让它工作,但文本中间的两行重复(数组中有两个对它们的引用,因此printext
它们被打印两次)。这怎么可能?对 malloc 的调用是否错误? - 其次,当我尝试对我刚才提到的行进行异或运算时,它们只会异或一次,所以我最终得到一个异或行,每个重复行都有一个正常的行。