gpt4 book ai didi

c - 为什么 `optarg` 没有被覆盖?

转载 作者:太空狗 更新时间:2023-10-29 16:05:26 25 4
gpt4 key购买 nike

我是 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 中返回的所有内容?
我只是运气好,optargrealloc() 没有分配到同一个地址吗?

最佳答案

来自 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com