C 加密代码不';不要写回文件

C 加密代码不';不要写回文件,c,C,我编译代码,然后运行它,但它返回“将加密数据写入文件时出错。因此我假设问题出在fwrite中的某个地方。” 但我无法准确指出 我需要一些帮助,如果你能解释这个问题,这将是非常有帮助的,谢谢 #include <stdio.h> #include <string.h> #include <stdlib.h> int encrypt_data(FILE *); int main(void) { FI

我编译代码,然后运行它,但它返回“将加密数据写入文件时出错。因此我假设问题出在fwrite中的某个地方。”

但我无法准确指出

我需要一些帮助,如果你能解释这个问题,这将是非常有帮助的,谢谢

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

    int encrypt_data(FILE *);

    int main(void)
    {
       FILE *fp;
       int return_code;

       printf("Please enter the file to be encrypted: ");
       char filename[200];
       scanf("%s", filename);
       fp=fopen(filename,"r");

       return_code = encrypt_data(fp);

       return 0;
    }
    int encrypt_data(FILE *disk_fp)
    {
      int i;
      unsigned long int file_size;
      int key_length;
      char *file_buff = NULL;

      char key[] = "12`3-vk0fn";

      key_length = strlen(key);

      fseek(disk_fp, 0, SEEK_END);
      file_size = ftell(disk_fp);

      rewind(disk_fp);

      file_buff = malloc(file_size);

      if( fread(file_buff, file_size, 1, disk_fp) != 1)
      {
       printf("Error in reading file\n");
       return -1;
      }

      for( i=0; i<file_size; i++)
      {
       file_buff[i] = file_buff[i] ^ key[i%key_length];
      }

      rewind(disk_fp);

      if( fwrite(file_buff, file_size, 1, disk_fp) != 1)
      {
       printf("Error in writing encrypted data to file\n");
       return -1;
      }
      free(file_buff);
      fclose(disk_fp);

    return 0;
    }
#包括
#包括
#包括
int加密_数据(文件*);
内部主(空)
{
文件*fp;
int返回_码;
printf(“请输入要加密的文件:”);
字符文件名[200];
scanf(“%s”,文件名);
fp=fopen(文件名,“r”);
返回\u代码=加密\u数据(fp);
返回0;
}
int加密\u数据(文件*磁盘\u fp)
{
int i;
无符号长整型文件大小;
int键长度;
char*file_buff=NULL;
字符键[]=“12`3-vk0fn”;
密钥长度=strlen(密钥);
fseek(磁盘fp,0,寻道结束);
文件大小=ftell(磁盘大小);
倒带(磁盘_fp);
file\u buff=malloc(文件大小);
如果(fread(文件大小,文件大小,1,磁盘大小)!=1)
{
printf(“读取文件时出错\n”);
返回-1;
}

对于(i=0;i您正在用“r”打开文件"模式,这意味着只读。然后您尝试写入一些内容。顺便说一句,当fwrite/fread失败时,您不会检查打开的文件是否没有错误,也不会关闭它。

为什么您希望
fwrite
的返回值为1?非常接近的副本。如果您想知道为什么系统调用失败,请尝试让系统告诉您。Inst阅读
printf(“我模棱两可的错误消息”)
,尝试
perror(“fwrite”)
非常感谢William Pursell和Adrian Krupa…Adrian这就像你在只读中说的,William你认为这个noob程序员perror()谢谢。