【发布时间】:2015-03-01 23:41:19
【问题描述】:
while循环出了点问题,但我真的不明白为什么。它应该将文件的加密或解密结果打印到带有参数的输出文件中(progname.exe -e input.txt)
问题是没有使用加密或解密代码创建输出文件
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
int c;
FILE *fp;
FILE *output;
if (argc < 2) {
exit(EXIT_FAILURE);
} else if ((fp = fopen(argv[1], "r")) == NULL) {
exit(EXIT_FAILURE);
}
if (strncmp (argv[1], "-d", 2) == 0) {
output = fopen (argv[5], "w+");
while (fscanf(fp,"%x",&c) != EOF) {
c = c >> 2;
c = c-200;
printf("%c", c);
}
}
if (strncmp (argv[1], "-e", 2) == 0) {
output = fopen (argv[5], "w+");
while ((c = getc(fp)) != EOF) {
c = c+200;
c = c << 2;
printf("%04x ", c);
}
}
putchar('\n');
return EXIT_SUCCESS;
}
【问题讨论】:
-
它当前正在打开一个文本文件,它是加密还是解密它取决于用户
-
问题是没有使用加密或解密代码创建的输出文件
-
你没有打开文件 fp.您在 argv[5] 中查找输出文件的名称。这可能远远超出您提供的参数数量。我猜你的意思是 argv[2]。然后修复 argc 检查。你永远不会写入输出。您写入标准输出(屏幕)。等
-
当我在我的代码中实现参数时,它停止打印加密或解密的代码
-
糟糕,看到你打开了 fp。但是你使用 argv[1] 来获得它的名字。同时
argv[1]应该是“-e”或者“-d”。你的程序应该有 3 个参数 (argc == 4)。argv[1]是“-e”或“-d”,argv[2]是 fp 的名称,argv[3]是输出的名称。先解决这个问题。要写入输出文件,请使用printf(output, ...)。首先尝试简单地将 fp 复制到输出中而不更改文本并使其正常工作。
标签: c encryption