这是我需要帮助的代码的一部分 -
include <stdlib.h>
include <time.h>
include <stdio.h>
include "aes.h"
void encrypt(const char *fileIn, const char *fileOut,
const unsigned char *key);
void decrypt(const char *fileIn, const char *fileOut,
const unsigned char *key);
int main()
{
const unsigned char key[] = "my key";
srand(time(NULL));
aes_init();
encrypt( "main.c", "main.c.encrypted", key);
decrypt("main.c.encrypted", "main.c.decrypted", key);
return 0;
}
现在,我所做的是,每次运行程序之前都是......我转到代码并更改文件的名称,如...
encrypt("main.c", "main.c.encrypted", key);
decrypt("main.c.encrypted", "main.c.decrypted", key);
或
encrypt("trial.doc", "trial.doc.encrypted", key);
decrypt("trial.doc.encrypted", "trial.doc.decrypted", key);
但是,我希望用户能够在程序运行时输入这些文件名。
我该怎么做?
答案 0 :(得分:1)
将参数传递给程序
int main (int argc, char *argv[]) { ...
是您要使用的main
原型,然后您可以自己获取参数计数和参数。
例如,以下C程序打印出所有参数,包括表示可执行文件的参数:
#include <stdio.h>
int main (int argc, char *argv[]) {
for (int i = 0; i < argc; i++)
printf ("argv[%d] = '%s'\n", i, argv[i]);
return 0;
}
如果你用:
运行它./myprog three point one four one five nine
您将看到输出:
argv[0] = './myprog'
argv[1] = 'three'
argv[2] = 'point'
argv[3] = 'one'
argv[4] = 'four'
argv[5] = 'one'
argv[6] = 'five'
argv[7] = 'nine'
另一种方法是从程序中输入它们,为此,您可以使用安全输入功能,例如here显示的功能。
安全输入函数通常使用fgets()
来确保没有缓冲区溢出的可能性。链接到上面的功能有各种其他方便的功能,如文件结束检测,处理太长的行(检测和纠正)和提示。
答案 1 :(得分:0)
如何使用scanf(),以便用户可以运行该程序并输入所需的文件名?
printf("Please enter file name to encrypt: ");
char name[80];
scanf("%s", name);
然后你可以复制字符串并连接&#34; .encrypted&#34;或者&#34; .decrypted&#34;字符串如下所述:C String Concatenation