gpt4 book ai didi

c - 切换大小写不影响变量 C

转载 作者:行者123 更新时间:2023-11-30 14:43:48 30 4
gpt4 key购买 nike

int main (int argc, char **argv) {
//Initialise variable for switch option
int option = 0;
//Set time to default to epoch
char *argtime = "1970-01-01 00:00:00";
//Use getopt to parse switches t and h (neither requires an argument, as epoch is defaulted to if non is supplied)
while ((option = getopt(argc, argv, "th")) != -1) {
//Switch statements for supplied switches
switch (option) {
//If -t
case 't':
//If arg supplied
if(optarg != NULL) {
//Set arg to given arg
argtime = optarg;
}
printf("-t is selected.\n");
break;
//If -h
case 'h':
printf("Help is selected\n");
break;
//If anything else
default:
printf("Option invalid\n");
return 1;
}
}
printf("The set time is %s\n", argtime);
return 0;
}

这是我编写的一些代码,用于使用 getopt() 解析命令行开关和参数。如果没有提供参数,我希望 argtime 默认为“1970-01-01 00:00:00”,它确实如此,但是当我使用 -t 时切换并提供不同的参数,argtime 不受影响。所以基本上 argtime = optarg; 没有做它应该做的事情,但我不知道为什么。

最佳答案

您需要告诉 getopt() 需要参数的选项。正如评论中@xing 所描述的,您可以通过在受影响的选项字母后面的选项字符串中放置一个冒号来实现这一点。这允许 getopt() 正确处理分组选项并识别非选项参数。只有这样做,您才能期望选项参数通过 optarg 传达给您。

您在评论中声称想要一个可选的选项参数。 POSIX 标准 getopt() 没有提供这一点。在您的特定情况下,不清楚您为什么需要它,因为指定不带参数的 -t 选项意味着什么?该程序应该使用默认值吗?但这就是如果完全省略 -t 时它将执行的操作。

尽管如此,使用 POSIX getopt() 处理这种情况的方法是提供两个单独的选项,一个带参数,一个不带参数。例如,您可以使用选项 -T 来表示您想要的任何内容 -t 而无需使用选项来表示 (getopt(argc, argv, "t:Th"))。或者,如果您愿意依赖 GNU 扩展,那么您可以通过双冒号表示 optional 参数 (getopt(argc, argv, "t::h")),但这比较少可移植,并且语义略有不同。

关于c - 切换大小写不影响变量 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53727251/

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