繁体   English   中英

命令行参数C

[英]Command Line Argument C

我需要帮助以C语言在命令行中显示名称(不知道如何解释)

$:Enter your name: Test
$:Test>

但是当您继续按Enter时,它仍然显示Test>

$:Test>
$:Test>

因此,我们如何获得argv [0]并执行类似的操作(对不起,我可能无法解释)

谢谢

命令行参数存储在char ** argv中,并且其中有argc。

int main(int argc, char **argv)
{
    int i=0;
    for(i=0; i< argc; i++)
       printf("argument number %d = %s\n", i, argv[i]);
    return 0;
}

argv [0]是正在执行的程序的名称,因此argc始终至少为== 1(或更大)

只要有可能,就应该使用getopt(),以便参数顺序无关紧要。 例如,假设您要为该大小采用一个整数参数,为执行模式采用一个整数,并使用一个切换来指示是否以“安静模式”运行。 进一步假设“ -h”应打印帮助并退出。 这样的代码可以解决问题。 “ s:m:hq”字符串表示“ -s”和“ -m”提供参数,而其他标志则不提供。

int main() {
  // parse the command-line options
  int opt;
  int size = DEFAULT_SIZE, mode = DEFAULT_MODE, quiet = 0;
  while ((opt = getopt(argc, argv, "s:m:hq")) != -1) {
    switch (opt) {
      case 's': size  = atoi(optarg); break;
      case 'm': mode  = atoi(optarg); break;
      case 'q': quiet = 1;            break;
      case 'h': usage(); return 0;
    }
  }
  // rest of code goes here
}

当然,如果optarg为null,则应该添加错误检查。

另外,如果您使用的是C ++,则“ string(optarg)”是case语句设置std :: string的合适方式,以保存以char *形式存储在argv中的值。

如果您想到的是类似shell的程序,则可以使用以下程序:

#include <stdio.h>
#include <string.h>
#include <stdbool.h>

#define BUFSIZE 64

int main() {
  char prompt[BUFSIZE];
  char command[BUFSIZE];
  char *prefix = "$:";
  char *suffix = ">";

  printf("%s%s%s", prefix, "Enter your name:", suffix);
  fgets(prompt, BUFSIZE, stdin);
  prompt[strlen(prompt)-1] = '\0'; // get rid of the \n

  while (true) {
    printf("%s%s%s", prefix, prompt, suffix);
    fgets(command, BUFSIZE, stdin);
    if (strncmp(command,"Quit",4) == 0)
      break;
  }

  return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM