【发布时间】:2014-03-22 13:08:04
【问题描述】:
我正在尝试将 getopt() 用于需要“e”或“d”选项来选择加密或解密的程序,然后需要一个密钥用于任一操作。我的问题是我不确定如何使用 getopt() 处理密钥。在这一点上,我已经阅读了 man getopt() 的大部分内容和许多其他文章。我目前收到浮点错误和核心转储,并收到警告消息:
cypher.c:在函数“main”中: cypher.c:14:3:警告:从不兼容的指针类型传递“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);
}
【问题讨论】:
-
@hek2mgl,如果您是新人,手册页很烂,所以投反对票,也很烂...
-
我在这里没有人投票。我认为这个手册页确实很有帮助,因为它带有示例和很好的解释。它不烂,试一试。我也读过,不错。我已经明确发布了
man 3 ...,因为我想表明只输入man getopt会为您提供具有相同功能的shell 程序的手册页,这是不同的事情,并且与C 函数的行为也不同。快乐的选项解析! :)