需要加密一个文件,我把它全写,但读取文件时出错

#include  #include  #include  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()是罪魁祸首,但我在如何修复它时非常迷失。

如果您可以在代码中找到错误,然后解释为什么它会弄乱,那将来会对我有所帮助。 非常感谢。

删除filename变量的双引号。 并把它作为

 fp=fopen(filename,"w+"); 

也许我错了,但仔细检查我认为你最好使用

 scanf("%s", filename); 

而不是fgets()函数。 毕竟,您正在读取用户的文本,而不是文件。