C 在运行时模拟命令行参数

C 在运行时模拟命令行参数,c,command-line,argv,C,Command Line,Argv,我有一个库,当库编译为独立二进制时,它有自己的命令行参数解析机制,下面是代码: int main( int argc, char **argv ) { int result; argc = wool_init( argc, argv ); .... } int wool_init( int argc, char **argv ) { us_elapsed(); argc = decode_options( argc, argv ); ..... } 现在我将这个

我有一个库,当库编译为独立二进制时,它有自己的命令行参数解析机制,下面是代码:

int main( int argc, char **argv )
{
  int result;

  argc = wool_init( argc, argv );
  ....
}

int wool_init( int argc, char **argv )
{

  us_elapsed();

  argc = decode_options( argc, argv );
  .....
}
现在我将这个库静态链接到另一个库中,它有自己的命令行解析机制和参数。我想在运行时用一些参数初始化第一个库,例如,我传递这些参数以模拟命令行:

/* initializing wool run-time environment */
char **woolArg;
*woolArg[0] = "-p 3";
wool_init(1, woolArg);
但我得到以下错误

:113:14: error: assignment makes integer from pointer without a cast [-Werror]
  *woolArg[0] = "-p 3";
              ^
有人能帮忙吗?

让我们数数星星

woolArg = malloc(sizeof(char *) * 3/*number of args*/);

woolArg[0] = /*program name*/;
woolArg[1] = "-p";
woolArg[2] = "3";
char **woolArg;
申报时有两颗星

woolArg[0]
这消耗了一颗星。我们只剩下一个
字符*

*woolArg[0]
这会耗尽另一颗星。我们只剩下一个
字符

*woolArg[0] = "-p 3";
作业右侧有一个
char*
char
char*
是两种截然不同的东西。你可能想试试

woolArg[0] = "-p 3";
。。。除非它不起作用,因为
woolArg
未初始化,因此不能触摸
woolArg[0]
。但是不要试图解决这个问题,只会陷入下一个问题,然后是下一个问题,然后是下一个问题,学习简单而正确的形式:

char* woolArg[] = { "library", "-p", "3", NULL };

第一个字符串是任意的。如果可以访问,您可以在此处使用argv[0]。

将内存管理问题放在一边,这里的其他答案已经解决了这一问题。让我们解释一下错误消息。你的声明是:

*woolArg[0] = "-p 3";
什么类型的

  • woolArg
    char**/code>
  • *woolArg
    是一个
    char*
  • *woolArg[0]
    是一个
    char
  • 但会变成
    char*
因此,作业的左侧需要一个
char
,而右侧需要一个
char*
。因此,警告/错误是您正在隐式地将指针转换为整数

要解决此问题,您需要摆脱间接寻址:

woolArg[0] = "-p 3";

op还忘记了
woolArg的空格
为什么
strdup
?这对于字符串文本来说是不必要的(只要你不打算遍历数组来释放所有条目)。有人否决了我的问题吗?我能问一下原因吗?我没有否决投票,但这可能是因为你可以通过搜索错误消息来回答这个问题,这会在这里产生大量关于StackOverflow处理该问题的相关问题。