gpt4 book ai didi

C编程-文件结尾的1的补码

转载 作者:太空宇宙 更新时间:2023-11-04 08:14:04 24 4
gpt4 key购买 nike

首先,我是 C 的新手。

我偶然发现了一个示例,它要求用户解密一个 c 文件(其中包含另一个 c 文件的 1 补码)。

通常,您会使用以下语句复制字符

    while ((ch = fgetc(fs)) != EOF)

但是我在解密文件时遇到了问题。我尝试了以下 -

    while (~(ch = fgetc(fs)) != EOF)

结果是——程序进入无限循环。我尝试使用 EOF 的 ASCII 值(即 26),但即使那样也对我不利。

如有任何帮助,我们将不胜感激。提前致谢。


/*解密文件的程序*/

这是完整的代码-

    #include<stdio.h>
#include<stdlib.h>

void main()
{
FILE *fs, *ft;
char ch;

fs = fopen("xyz.c", "r");
ft = fopen("xyz1.c", "w");

if((fs == NULL) || (ft == NULL))
{
printf("Cannot open the file.\n");
exit(1);
}

while (~(ch = fgetc(fs)) != EOF)
fputc(~ch, ft);

fclose(fs);
fclose(ft);
}

最佳答案

EOF 是一个标记,表示已到达文件(或流)的末尾。现在,这样的标记不由您处理 - 您不能修改它(或加密它,在这种情况下),因为它由底层文件系统内部管理。

因此,检查 ~EOF 在逻辑上是错误的,只会捕获该特定值(EOF 在大多数实现中为 -1,因此~-10)。

简单地:

int ch;
while ( (ch = fgetc(fs)) != EOF )
int decoded = ~ch;

关于C编程-文件结尾的1的补码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36869144/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com