gpt4 book ai didi

c - 文件写入bug

转载 作者:行者123 更新时间:2023-11-30 16:47:13 26 4
gpt4 key购买 nike

我正在做一个C语言的密码项目。我必须编写 9 个具有多种加密/解密目的的函数。该函数应该能够读取“message.txt”文件中的文本,对消息进行加密/解密(取决于用户输入),然后将结果写入函数创建的新“code.txt”文件中。用户将给出一个 key (谱号)和他想要的模式(加密/解密),该函数将基于另一个遵循维吉尼亚方法进行加密/解密的函数来执行。这是我的代码,(有些部分是西类牙语,抱歉)首先是加密/解密的函数,然后是文件读取/写入的函数,然后是 main()。 (如果模式==0 函数解密)。

#include <string.h>
#include <stdio.h>

int vigenereCipher(char *chaine, char *key, char *code, int mode)
{
int i = 0, c = 0;

if (mode != 0) {
for (; i < strlen(chaine); i++) {
if (chaine[i] + key[c] < 256) {
code[i] = chaine[i] + key[c];
c += 1;
} else {
code[i] = chaine[i] + key[c] - 256;
c += 1;
}

if (c == strlen(key)) {
c = 0;
}
}
} else {
for (; i < strlen(chaine); i++) {
if (chaine[i] - key[c] < 0) {
code[i] = chaine[i] - key[c];
c += 1;
} else {
code[i] = chaine[i] - key[c] + 256;
c += 1;
}

if (c == strlen(key)) {
c = 0;
}
}
}

printf("\n %s -> %s \n", chaine, code);
if (*chaine == *chaine) {
printf("\n0\n");
} else {
printf("\n1\n");
}
}

int encryptTextFile(char *key, int mode)
{
char chaine[99999];
char code[99999];
int i;
FILE *archivo1, *archivo2;

archivo1 = fopen("message.txt", "r");
archivo2 = fopen("code.txt", "w");

fscanf(archivo1, "%s", chaine);

vigenereCipher(chaine, key, code, mode);

for (i = 0; i < strlen(chaine); i++) {
fprintf(archivo2, "%c", code[i]);
}

fclose(archivo1);
fclose(archivo2);
}

int main()
{
char key[99999];
int mode;

printf("Enter encryption key: ");
gets(key);

printf("Enter desired mode (1 or 0): ");
scanf("%i", &mode);

encryptTextFile(key, mode);
}

此函数可以正确加密/解密,但是当它尝试将结果写入“code.txt”文件时,它不会写入之前给出的相同加密/解密字符。

我该如何纠正这个问题,以便将更改后的相同字符写入“code.txt”文件中?谢谢。 (如果您需要将某些内容翻译成英文,请告诉我。)

最佳答案

strlen 使用第一个 '\0' 来确定长度。因此,strlen 可能会错误地缩短加密字符串。

因此,考虑存储大小的字节 block ,您需要其他字符串表示形式。

关于c - 文件写入bug,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43400935/

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