C 如何接受字符或字符串作为输入

C 如何接受字符或字符串作为输入,c,argp,C,Argp,在阅读了一篇关于argp的著名pdf之后,我想用它做点什么,但我遇到了一个问题,在本例中: static int parse_opt (int key, char *arg, struct argp_state *state) { switch (key) { case 'd': { unsigned int i; for (i = 0; i < atoi (arg); i++)

在阅读了一篇关于argp的著名pdf之后,我想用它做点什么,但我遇到了一个问题,在本例中:

static int parse_opt (int key, char *arg, struct argp_state *state)
{
    switch (key)
    {
        case 'd':
        {
            unsigned int i;
            for (i = 0; i < atoi (arg); i++)
                printf (".");
            printf ("\n");
            break;
        }
    }
    return 0;
}

int main (int argc, char **argv)
{
    struct argp_option options[] = 
    {
        { "dot", 'd', "NUM", 0, "Show some dots on the screen"},
        { 0 }
    };
    struct argp argp = { options, parse_opt, 0, 0 };
    return argp_parse (&argp, argc, argv, 0, 0, 0);
}
提前谢谢。

#包括
#包括
#包括
静态int parse_opt(int key,char*arg,struct argp_state*state){
(void)state;//我们不使用state
开关(钥匙){
案例“c”:{
如果(strlen(arg)==1){//我们只需要一个字符
char c=*arg;//或arg[0]
printf(“我的超级字符%c!!!\n”,c);
}否则{
返回1;
}
}
}
返回0;
}
int main(int argc,字符**argv){
结构argp_选项const options[]={
{char',c',c',0,“超级字符”,0},{0};
struct argp const argp={options,&parse_opt,NULL,NULL,NULL,NULL};
argp_解析(&argp,argc,argv,0,NULL,NULL);
}

注意澄清
d接受int类型的参数,
?“-d接受int类型的参数”。那不是真的
arg
始终是一个字符串。是您的代码将其更改为
int
。如果你想把它存储为一个字符串,那么就不要调用
atoi
@sjsam当然,有一个叫做i的无符号整数,它与-d的参数“NUM”有关,“NUM”参数justs接受整数,我希望它接受字符或字符数组,我希望我是clear@kaylum上面的代码不是我的实际项目,我是从pdf中得到的,在我的代码中,我试图将arg与char进行比较,但它不起作用,因为它说它需要const char,但参数的类型是int,如果我是一个彻头彻尾的noob,请耐心听我说。好吧,然后显示您尝试过但不起作用的代码。如果我们看不到代码,就不能指出错误。我有点明白了,但是你能解释一下结构argp中的部分吗?当它说NULL时,文档中的示例没有显示类似的内容,或者至少在我看到的示例中没有显示类似的内容。这只是为了避免警告,因为
struct argp
有很多字段。要知道什么是
NULL
read
static int parse_opt(int key, char *arg, struct argp_state *state)
{       
    switch(key)
    {
        case 'e':
        {
            //Here I want to check if "TOPIC" has something, in this case, a char array
            //then based on that, do something.
            if (0 == strcmp(arg, 'e'))
            {
                printf("Worked");
            }
        }
    }

    return 0;
}//End of parse_opt

int main(int argc, char **argv)
{
    struct argp_option options[] = 
    {
        {"example", 'e', "TOPIC", 0, "Shows examples about a mathematical topic"},
        {0}
    };

    struct argp argp = {options, parse_opt};

    return argp_parse (&argp, argc, argv, 0, 0, 0); 
}//End of main
#include <stdio.h>
#include <argp.h>
#include <string.h>

static int parse_opt(int key, char *arg, struct argp_state *state) {
  (void)state; // We don't use state
  switch (key) {
  case 'c': {
    if (strlen(arg) == 1) { // we only want one char
      char c = *arg;        // or arg[0]
      printf("my super char %c !!!\n", c);
    } else {
      return 1;
    }
  }
  }
  return 0;
}

int main(int argc, char **argv) {
  struct argp_option const options[] = {
      {"char", 'c', "c", 0, "a super char", 0}, {0}};
  struct argp const argp = {options, &parse_opt, NULL, NULL, NULL, NULL, NULL};
  argp_parse(&argp, argc, argv, 0, NULL, NULL);
}