Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 简单的XOR加密程序无法按预期工作_C - Fatal编程技术网

C 简单的XOR加密程序无法按预期工作

C 简单的XOR加密程序无法按预期工作,c,C,我正在用C写一个简单的XOR加密程序 它应该逐行读取文本文件 并创建一个新的加密文件 问题是它只加密文件的第一行,而跳过了文件的其余部分 这就是我想出的代码。 根据我的分析,它应该逐行加密文件。 但很明显,我在某个地方错了,这就是它行为不端的原因。 如果有更聪明的人能指出我的错误,那将非常有帮助 #包括 无效加密(字符*消息); int main() { 字符行[100];//文件中的所有行都少于100个字符 文件*in=fopen(“msg.txt”、“r”); 文件*out=fopen(“

我正在用C写一个简单的XOR加密程序

它应该逐行读取文本文件 并创建一个新的加密文件

问题是它只加密文件的第一行,而跳过了文件的其余部分

这就是我想出的代码。 根据我的分析,它应该逐行加密文件。 但很明显,我在某个地方错了,这就是它行为不端的原因。

如果有更聪明的人能指出我的错误,那将非常有帮助


#包括
无效加密(字符*消息);
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
,在第二次
while
fscanf
迭代之后,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);
}