命令行参数C.

时间:2013-10-03 01:55:27

标签: c shell terminal command-line-arguments user-input

我需要帮助在C

中显示这样的命令行名称(我不知道如何解释)
$:Enter your name: Test
$:Test>

但是当你继续按时输入它仍然显示测试>

$:Test>
$:Test>

那么我们如何得到argv [0]并做这样的事情(很抱歉我无法解释)

谢谢

3 个答案:

答案 0 :(得分:2)

命令行参数存储在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(或更多)

答案 1 :(得分:0)

只要有可能,您应该使用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来保存一个在argv中存储为char *的值的合适方式。

答案 2 :(得分:0)

如果你有一个类似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;
}