C 简单的XOR加密程序无法按预期工作
我正在用C写一个简单的XOR加密程序 它应该逐行读取文本文件 并创建一个新的加密文件 问题是它只加密文件的第一行,而跳过了文件的其余部分 这就是我想出的代码。 根据我的分析,它应该逐行加密文件。 但很明显,我在某个地方错了,这就是它行为不端的原因。 如果有更聪明的人能指出我的错误,那将非常有帮助C 简单的XOR加密程序无法按预期工作,c,C,我正在用C写一个简单的XOR加密程序 它应该逐行读取文本文件 并创建一个新的加密文件 问题是它只加密文件的第一行,而跳过了文件的其余部分 这就是我想出的代码。 根据我的分析,它应该逐行加密文件。 但很明显,我在某个地方错了,这就是它行为不端的原因。 如果有更聪明的人能指出我的错误,那将非常有帮助 #包括 无效加密(字符*消息); int main() { 字符行[100];//文件中的所有行都少于100个字符 文件*in=fopen(“msg.txt”、“r”); 文件*out=fopen(“
#包括
无效加密(字符*消息);
int main()
{
字符行[100];//文件中的所有行都少于100个字符
文件*in=fopen(“msg.txt”、“r”);
文件*out=fopen(“加密的_msg.txt”,“a”);
而(fscanf(in,“%99[^\n]”,line)==1)//我在每次迭代中都包含扫描集以读取新行
{
加密(行);
}
fprintf(输出,“%s\n”,行);
返回0;
}
无效加密(字符*消息)
{
while(*msg)
{
*味精=*味精^31;
msg++;
}
}
这很简单。只需添加:
char c = fgetc(in);
在您的中,而
读取尾行\n
像这样:
while(fscanf(in,"%99[^\n]",line)==1)
{
encrypt(line);
char c = fgetc(in);
}
您指定了
fscanf
来读取除换行符\n
之外的所有符号,因此,在第一次while
迭代之后,输入中有一个\n
,在第二次whilefscanf
迭代之后,fscanf
无法读取任何内容,因为您将\n
从允许的字符集中排除。我认为Edgar Rokyan的答案是有效的,因为fscanf不会在下一次从行中删除\n它出现在第一个字符附近,它是一个\n导致不读取任何内容的字符。我的解决方案是使用fgets,它将\n读入行缓冲区(如果您不想在那里使用它,请使用if语句检查它,并将最后一个字符更改为\0)
或删除行末尾的\n
while(fgets(line, 99, in)) // I included scanset to read new line in every iteration
{
int len = strlen(line);
if(line[len - 1] == '\n')
line[len - 1] = '\0';
encrypt(line);
}
哈哈,对不起,我打错了
while(fgets(line, 99, in)) // I included scanset to read new line in every iteration
{
encrypt(line);
}
while(fgets(line, 99, in)) // I included scanset to read new line in every iteration
{
int len = strlen(line);
if(line[len - 1] == '\n')
line[len - 1] = '\0';
encrypt(line);
}