- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用 getopt_long 进行一些基本的选项解析。我的具体问题是当不使用该选项时默认的 int 值被覆盖。我已经通读了文档和一些关于 getopt 的解释,但没有看到任何关于保留默认值/可选参数的内容。
编译并运行它,我希望 port/p 的默认值为 4567。当我不指定任何选项或使用 -p 5050 时,一切正常。当我使用其他选项 (-t) 时,-p 的值也会更改。
gcc -o tun2udp_dtls tun2udp_dtls.c
$ /tun2udp_dtls
port 4567 // correct
$ /tun2udp_dtls -p 5050
port 5050 // correct
$ ./tun2udp_dtls -t foo
port 0 // wtf!?
代码:
#include <errno.h>
#include <fcntl.h>
#include <netinet/in.h>
#include <sys/ioctl.h>
#include <sys/select.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <string.h>
#include <unistd.h>
#include <getopt.h>
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char *argv[]) {
// Vars
char devname[128];
int port = 4567;
int c;
while (1) {
static struct option long_options[] = {
{"tdev", required_argument, NULL, 't'},
{"port", required_argument, NULL, 'p'},
{0, 0, 0, 0}
};
int option_index = 0;
c = getopt_long (argc, argv, "t:p:", long_options, &option_index);
if (c == -1) break;
switch (c) {
case 't':
strncpy(devname, optarg, sizeof(devname));
devname[sizeof(devname)-1] = 0;
case 'p':
port = atoi(optarg);
default:
break;
}
}
// Temporary debug printout
printf("tdev '%s'\n", devname);
printf("port %i\n", port);
}
最佳答案
在 case 'p':
之前缺少 break
。这就是为什么在处理“t”时控制到达 port=atoi(optarg);
的原因;然后 atoi(optarg)
为非数字设备名称返回 0,并将此 0 分配给端口。
关于c - getopt_long 保留可选参数的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14300515/
我正在为名为 fp 的命令编写以下代码,该命令存在于一个框架中,用于处理这些已存在的命令。我对 C 相当陌生,我正在尝试使用 getopt_long() 解析此命令的一些参数。目前,参数除了打印参数名
我正在使用 getopt_long 读取命令行选项。代码: #include #include #include int main(int argc, char *argv[]) { i
int next_option; int keep_content =0; int option_index = 0; const string short_options = "c::"; con
我正在编写一些代码来解析命令行输入。我使用getopt_long的方式如下: int c = 0; static struct option long_options[] = { {"mod
我正在使用 getopt 和 getopt_long 来解析 C++ 程序的参数。当正确给出参数时,我没有问题。此外,当给出错误的短参数时,错误消息会正确打印。但是当给出错误的长参数时,我没有收到它的
我有下面的代码。但是当我用 --debug=2 运行它时,调试变量的值为 100。我期望 2...我的错误在哪里?这里的代码: int debug=0; int opt; struct o
int main(int argc , char *argv[]) { int c; int sock; struct sockaddr_in server; char
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: getopt_long() — proper way to use it? 我在 C 程序中遇到 getop
我在解析我正在编写的程序中的参数时遇到问题,代码如下: void parse_args(int argc, char** argv) { char ch; int index = 0;
我是第一次尝试使用 getopt_long() 函数,只是我遇到了不是标志的参数的问题。例如,在我的代码中,当给出一个未知参数时,我想将它用作输入文件。当我只使用一个文件名运行它时,它不会被打印出来,
我正在尝试使用 getopt_long 进行一些基本的选项解析。我的具体问题是当不使用该选项时默认的 int 值被覆盖。我已经通读了文档和一些关于 getopt 的解释,但没有看到任何关于保留默认值/
如果给定一个选项,是否可以告诉 getopt_long 我需要两个参数? 例如,如果 -i 存在,接下来需要两个参数,如果它们不存在,解析将失败。 最佳答案 根据manual和 getopt_long
我一直在阅读如何使用 getopt_long(),以及如何使用 optlong“读取”多字符选项。 我需要从终端解析以下条目: ./bomb –n String –cp Integer –i Inte
我有以下代码 #include #include int main(int argc, char* argv[]){ const struct option longo
当 getopt 或 getopt_long 遇到非法选项时,它将违规选项字符存储在 optopt 中。当非法选项是一个long 选项时,我在哪里可以找到该选项是什么?然后,optopt 中是否存储了
好的,我已经搜索并找到了以下两个 StackOverflow 主题,这些主题让我开始了正确的方向: Argument-parsing helpers for C/UNIX Pass arguments
使用gcc -Wall getopt.c -o options进行编译并运行一些示例后,乍一看似乎可以工作。故意绊倒它会导致段错误。 //straight from the man page stat
这是我的第一个使用 getopt_long() 的程序,所以如果这个问题很琐碎,请原谅我。 当传递给我的程序的第一个参数无效时,我遇到了问题 这是我的主要代码 int main(int argc, c
我正在尝试使用 getopt_long() 创建一个带有可选参数的选项。 这是我的代码: static struct option long_options[] = { {"help", n
我想根据是否存在特定参数来委托(delegate)几个可能的参数列表之一,大致如下: ./test --do-thing-1 --option-A=7 --common-option --option
我是一名优秀的程序员,十分优秀!