gpt4 book ai didi

c - 使用 fscanf 关闭文件时出错

转载 作者:行者123 更新时间:2023-11-30 18:52:00 24 4
gpt4 key购买 nike

我正在编写一个代码,使用加密技术 Vigenère Cipher 来加密和解密明文。

要加密的代码工作正常,但我的解密代码有问题。

解密:

我读取了一个文件,其中包含明文的密码(编码)并选择两个数字的十六进制,与我的 key 进行XOR,它返回给我原始消息编码。

问题是在完成所有这些过程后我遇到了问题。该算法运行良好...可以解密,但似乎有问题使用 EOF,因为代码在处理后返回错误并且不允许我关闭文件。

这个想法是将密码XOR key 保存在文件中:

fprintf(fpOut, "%c", ch ^ key[i % KEY_LENGTH]);
  • 明文消息是“Hello!”
  • ctext 文件包含“Hello!”异或 key = e94acd43ce0e
  • dtext 文件必须包含消息 Hello Again(密码 XOR key = message)

我的原始代码(简化)是这样的:

#include <stdio.h>
#include <stdint.h>

#define KEY_LENGTH 2 // Can be anything from 1 to 13

int main ( void ) {

unsigned char ch;

FILE *fpIn, *fpOut;
int i;
unsigned char key[KEY_LENGTH] = {0xA1, 0x2F};

fpIn = fopen("ctext.txt", "r");
fpOut = fopen("dtext.txt", "w");
i = 0;

while (fscanf(fpIn, "%02x", &ch) != EOF) {
printf ("\n Value read: %x", ch);
if (ch != '\n'){
ch = ch ^ key[i % KEY_LENGTH];
i++;
}
printf ("\n Value after XOR: %c", ch);
}

fclose(fpIn);
fclose(fpOut);
return;
}

谁能看出我做错了什么吗?

最佳答案

如果您使用 -Wall 选项编译代码,将显示以下消息:

test.c: In function ‘main’:
test.c:471:5: warning: format ‘%x’ expects argument of type ‘unsigned int *’, but argument 3 has type ‘unsigned char *’ [-Wformat=]
while (fscanf(fpIn, "%02x", &ch) != EOF) {
^

错误是传递给 scanf 的变量类型。您正在传递 char 变量的地址,大部分为 8 位。

scanf 将该地址作为 unsigned int 指针,并用 sizeof(unsigned int) 字节写入。

ch变量之后声明的第一个变量是fpIn。该变量被 scanf 覆盖,这就是您无法关闭输入文件的原因:由于指针已损坏。

关于c - 使用 fscanf 关闭文件时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35461838/

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