gpt4 book ai didi

c - C 中的 Vigenere 代码因多字符键而崩溃

转载 作者:太空宇宙 更新时间:2023-11-04 03:35:02 26 4
gpt4 key购买 nike

如果我使用一个字符长的键,一切正常,但如果我使用更长的键,程序就会崩溃。对于此输入:'2A282E2A282E'应该输出这个:'aaaaaa'

#include <stdio.h>
#define KL 3
main()
{
unsigned char ch;
FILE *fpIn, *fpOut;
int i;
unsigned char key[KL] = {0x4B, 0x49, 0x4F};

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

i=0;
while(fscanf(fpIn, "%02X", &ch) != EOF)
{

fprintf(fpOut, "%c", ch ^ key[i % KL]);
i++;

}

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

最佳答案

当我用 GCC 编译你的程序时,我收到警告“格式 '%X' 需要类型为 'unsigned int *' 的参数,但参数 3 的类型为 'unsigned char *'”。这是一个可能导致崩溃的错误,因为 char 通常是一个字节宽,而 int 通常是四个字节。 fscanf 将尝试将四个字节的数据放入您的单字节空间,并愉快地覆盖后面的任何数据。

正如 BLUEPIXY 在评论中建议的那样,您只需将 unsigned char ch 替换为 unsigned ch

除此之外,当我尝试它时它起作用了,我没有发现其他明显的问题,除了你应该检查 fopen 的返回值。

关于c - C 中的 Vigenere 代码因多字符键而崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33346128/

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