gpt4 book ai didi

c - Optarg 和命令行参数

转载 作者:行者123 更新时间:2023-12-02 08:37:39 26 4
gpt4 key购买 nike

我正在从用户那里获取命令行参数。

然后我为命令做 switch case,例如:

    case 'f':
*file_name = optarg;
break;

我不确定是否需要 malloc 指针,因为我不完全理解 optarg。

file_name 是这样声明的:

char **file_name;

我应该这样做

int length = strlen(optarg); // This gives a warning about types when compiling.

然后malloc为字符串长度+1?

这种问题应该怎么做malloc呢?记住用户在 **argv 中输入了 file_name。

编辑:这就是我调用此函数的方式,但仍然出现段错误。

int main(int argc, char **argv)
{
char **file_name;
parser(argc, argvm file_name);
}

void parser(int argc, char **argv, char **file_name)
{
// Switch cases.
}

最佳答案

'optarg' 只是一个指向 argv[] 中元素的指针。因此,不分配内存并复制 'optarg' 指向的值是安全的。

假设使用以下参数调用您的程序:

myapp -a "hello" -b "world"

你的代码是:

#include <stdio.h>
#include <getopt.h>

void parse_options(int argc, char* argv[], char ** first_arg, char ** second_arg)
{
const char* opt_string = "a:b:";
int opt = -1;
opt = getopt(argc, argv, opt_string);
while (opt != -1) {
switch(opt) {
case 'a':
*first_arg = optarg; /* points to argv[2]="hello" */
break;
case 'b':
*second_arg = optarg; /* points to argv[4]="world" */
break;
default:
break;
}
opt = getopt(argc, argv, opt_string);
}
}

int main(int argc, char* argv[])
{
char* first = 0;
char* second = 0;
parse_options(argc, argv, &first, &second);
printf("first=%s, second=%s\n", first, second);
return 0;
}

我的输出:

freebsd% gcc -Wall main.c
freebsd% ./a.out -a hello -b world
first=hello, second=world

关于c - Optarg 和命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19748096/

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