#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];
fgets(filename, 200, stdin);
fp=fopen("filename","w+");
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;
}
我试图加密的文件是“encrypt.txt”它只是一个无意义的句子但是当我编译这段代码然后./a.out它要求我输入文件名时我输入encrypt.txt我想它可能只是想要名称,但无论哪种方式它都会返回“读取文件时出错”。
我认为我的fgets()fopen()是罪魁祸首,但我对如何修复它非常迷失。
如果您可以在代码中找到错误,然后解释为什么它会弄乱,那将来会对我有所帮助。非常感谢。
答案 0 :(得分:0)
删除filename变量的双引号。并把它作为
fp=fopen(filename,"w+");
答案 1 :(得分:0)
也许我错了,但仔细检查我认为你最好使用
scanf("%s", filename);
而不是fgets()函数。你正在读取用户的文字而不是文件。