- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我是 getopt(3)
的新手,查看了一些示例并遇到了 this one .
这些行
case 'c':
cvalue = optarg;
break;
我觉得很奇怪,因为 optarg 的内容没有被复制到 cvalue
中,它们只是复制指针。但它有效:
$ testopt -a -b -c foo
aflag = 1, bflag = 1, cvalue = foo
我预计 optarg
会被第二次调用 getopt()
覆盖,所以我写了 own program基于示例。令人惊讶的是,optarg
没有被覆盖。
$ testopt -p -f me -t you
pflag = 1, from = me, to = you
这项工作是否始终如一,还是我应该始终复制/复制?
我是否必须处理 free()
在 optarg
中返回的所有内容?
我只是运气好,optarg
的 realloc()
没有分配到同一个地址吗?
最佳答案
来自 GNU manuals :
If the option has an argument, getopt returns the argument by storing it in the variable optarg. You don’t ordinarily need to copy the optarg string, since it is a pointer into the original argv array, not into a static area that might be overwritten.
这就是为什么它不需要复制或分配的原因。 POSIX documentation optarg
需要这个。
关于c - 为什么 `optarg` 没有被覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52007993/
我正在从用户那里获取命令行参数。 然后我为命令做 switch case,例如: case 'f': *file_name = optarg; break;
我希望能够为 -a arg 获取 2 个值,例如:-a min max 我有以下代码: while((opt = getopt(argc,argv,"a:c:k:rv")) != -1) {
我正在尝试在 optarg 上使用 atoi,但它也可能是任何东西。我一直在试图弄清楚为什么我的 getopt_long 不起作用。当我输入我的 switch 语句时,optarg 设置为 null
Optarg 始终为空。应用程序崩溃。 static const char* const short_options = "a:h:p"; static const struct option lon
尝试使以下 C 代码工作,但每次我给它一个文件以返回它的大小时,都会说文件名为空。 我尝试过的示例命令行: 问题7 -h -t -f 问题8.c 无论如何,它返回 optarg 为 null。我不确定
我有一个程序需要使用以下方式调用: program parameter1 parameter2 -x1 -y 但我觉得如果我这样做应该会起作用: program -x1 -y parameter1 p
我希望能够在我的脚本中接受强制和可选标志。这是我目前所拥有的。 #!bin/bash while getopts ":a:b:cdef" opt; do case $opt in
我想在争论后得到更多的 optargs,但我不知道该怎么做。我想像 这样调用我的程序 ./test -a first second -b third 我现在只能在参数 -a 后获得一个值。当我尝试将两
我是C编程的新手,我对C++有一些经验,但对C一无所知。我有一个关于getopt optarg参数的问题,它是一个字符串。我想检查 -x 标志的输入参数是否等于“dog”。我当前的代码如下所示: in
我有下一个代码。 int opt; while ((opt = getopt(_argc, _argv, "n:pcs:")) != -1) { switch (opt) {
您好,我正在研究一本书中的一个程序。该程序几乎按预期运行,除了一个错误。每次我尝试使用“-l”大小写时,我都会遇到段错误。有什么想法吗? #include #include int main(in
考虑以下代码: int number; while((w = getopt(argc, argv, "n:s:")) != -1) { switch (w){
这个问题特别涉及 gcc 中可选参数的 getopt。当一个选项被定义为有一个可选参数并且没有给出参数时,optarg 被设置为一个空指针或一个指向空字符串的指针。手册似乎没有处理这种情况。行为是否得
我正在使用 getopt 来解析传递给我的 c 程序的参数。我想在解析时检查 optarg 是否全是数字,但我不知道如何获取 optarg 中值的长度: int opt; unsigned short
您好,我正在编写一个简单的客户端-服务器程序。在这个程序中,我必须使用 getopt() 来获取端口号和 IP 地址,如下所示: 服务器 -i 127.0.0.1 -p 10001 我不知道如何从 o
我是 getopt(3) 的新手,查看了一些示例并遇到了 this one . 这些行 case 'c': cvalue = optarg; break; 我觉得很奇怪,因为 op
我需要这样调用我的程序: ./program hello -r foo bar 我从 argv[1] 中打招呼,但我在使用值 bar 时遇到问题,我是否也应该将“r:”更改为其他内容? while((
有人可以检查此代码片段并告诉我为什么当我使用 -p abcdef 调用此脚本时 $OPTARG 从未具有传入的参数值吗? # Process command-line options passed a
通过实验,我似乎可以捕获 optarg 的连续值。迭代时 int getopt(int argc, char * const argv[], const char *optstring)并稍后引用它们
我正在尝试使用 GNU getopt 函数解析我的 C 程序中的一些命令行参数。假设我调用以下电话: ./my_program -E 16 -t path/to/file 我目前的期望是,如果我有以下
我是一名优秀的程序员,十分优秀!