gpt4 book ai didi

c - 解析选项的开关盒

转载 作者:行者123 更新时间:2023-12-04 09:19:40 25 4
gpt4 key购买 nike

我正在编写一个简单的程序,它从用户那里获取参数并处理它们。我在 argv 中有参数,它是二维数组。但是当我运行程序时,我得到了垃圾值和段错误。我尝试使用 argc 作为终止条件并且它有效。但我只想用指针来做。这里的指针有什么问题。

#include<stdio.h>
int main( int argc, char *argv[])
{
while (++(*argv))
{
if ( **argv == '-' )
{
switch (*argv[1])
{
default:
printf("Unknown option -%c\n\n", (*argv)[1]);
break;
case 'h':
printf("\n option h is found");
break;
case 'v':
printf("option V is found");
break;
case 'd':
printf("\n option d is found");
break;
}
}
printf("\n outside while : %s", *argv);
}
}

程序运行为:

./a.out -h -v -d

谢谢

最佳答案

  • 如果您想遍历程序参数以查找终止空指针,您的外循环应该是

    while (*++argv)

    不是

    while (++*argv) // <- incorrect!

    您的代码中有。

  • 您的 switch 表达式写错了。虽然您的意图很明确,但您的实现忽略了运算符优先级。

    这个

    switch (*argv[1])  { // <- incorrect!

    实际上应该是

    switch ((*argv)[1])  {
  • 前面的if

    if (**argv == '-')

    很好,但是因为它等同于

    if ((*argv)[0] == '-') // <- better

    也许你也应该这样重写它,只是为了与 switch 保持一致。

关于c - 解析选项的开关盒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17509479/

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