我正在尝试对一个程序使用getopt(),该程序需要一个“e”或“d”选项来选择encrypt或decrypt,然后需要一个密钥用于on。我的问题是我不知道如何使用getopt()处理密钥。在这一点上,我已经阅读了很多man getopt()的内容和许多其他文章。我当前收到一个浮点错误和核心转储,正在接收警告消息:
cypher.c:在函数“main”中:
cypher.c:14:3:警告:从不兼容的指针类型[enabled by default]传递“getopt”的参数2
/usr/include/getopt.h:152:12:注意:应为“char*const*”,但参数的类型为“char*”
cypher.c:28:13:警告:赋值使指针中的整数不带强制转换[默认启用]
下面是实际的代码任何帮助都是赞赏的。
include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
main(int argc, char **argv[]){
int e,x;
int i=0;
int c=fgetc(stdin);
// int n=strlen(key);
int encrypt;
while((x = getopt (argc, argv, "ed")) != -1){
switch (x){
case 'e':
encrypt=1;
break;
case 'd':
encrypt=0;
break;
default:
fputs("you broke it\n",stderr);
exit(1);
}
}
char key[100];
key[100]= argv[optind++];
int n = strlen(key);
if(encrypt == 1){
while(c != EOF){
c= fgetc(stdin);
e=(c - 32 + key[i % n]) % 95 +32;
fputc( e, stdout);
i++;
}
}
else{
while( e != EOF){
c = fgetc(stdin);
c=(e - 32 -key[i % n] +3 * 95) % 95 +32;
fputc(c, stdout);
i++;
}
}
exit (0);
}
最佳答案
通常需要将选项处理分为两个步骤:
收集所有选项并对它们进行任何预处理(例如检查它们的有效性),并根据需要将它们存储在变量或结构中。
实际根据遇到的全部选项采取操作。
因此,基本上您可能需要设置一个全局变量(例如opt_mode = ENCRYPT
或opt_mode = DECRYPT
或类似的变量),并根据需要存储密钥。然后,在完成所有选项处理之后,实际根据opt_mode
变量进行加密或解密。
关于c - 如何将getopt()与非选项参数一起使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21927309/