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处理该问题的相关问题。