如何将用户输入的名称作为参数传递给下面给出的函数?

时间:2014-05-21 05:44:31

标签: c encryption

这是我需要帮助的代码的一部分 -

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);

但是,我希望用户能够在程序运行时输入这些文件名。

我该怎么做?

2 个答案:

答案 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