文件写入错误

时间:2017-04-13 20:10:46

标签: c file

我正在使用C语言编写密码项目。我必须编写具有多个加密/解密目的的9个函数。该函数应该能够读取'message.txt'文件中的文本,加密/解密消息(取决于用户输入),然后将结果写入函数创建的新“code.txt”文件中。用户将给出他想要的密钥(谱号)和模式(密码/解密),并且该函数将基于另一个遵循Vigenère方法的密码/解密函数来执行。这是我的代码,(有些部分是西班牙语,对不起)首先是密码/解密的函数,然后是文件读/写一个然后是main()。 (IF MODE == 0 FUNCTION DECIPHERS)。

#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'文件? 谢谢。 (如果您需要翻译成英文的话,请告诉我。)

1 个答案:

答案 0 :(得分:0)

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

所以你需要一个其他的字符串表示,考虑存储大小的字节块。