如何将字符串数组转换为char**?

4
我想在这里手动发送数值。
void processArgs(int argc, char** argv);

如果我发送这样的消息
char* cwd[] = {"./comDaemon", "--loggg=pluginFramework:debug"};

parser->processArgs(2, cwd);

编译器显示警告:

警告:ISO C++禁止将字符串常量转换为'char *'[-Wwrite-strings]

 char* cwd[] = {"./comDaemon", "--loggg=pluginFramework:debug"};

1
你想要 const char* cwd[] - Borgleader
2
然后在processArgs()中,您需要使用const char **argc) - user207421
2个回答

6

有些人指出问题在于你试图将字符串字面量(它们是常量)传递给接受非const char ** 参数的函数。如果你想创建非const字符串,以便可以将其传递给非const参数函数,那么你需要使用显式字符数组(可以使用字符串文字进行初始化):

char arg0[] = "./comDaemon";
char arg1[] = "--loggg=pluginFramework:debug";
char *cwd[] = { arg0, arg1 };

你甚至可以在同一行完成这个操作:
char arg0[] = "./comDaemon", arg1[] = "--loggg=pluginFramework:debug", *cwd[] = { arg0, arg1 };

那是非常好的答案。 - Kunal Puri

4

如果你要传递 cwd 到一个期望 char ** 参数而不是 const char ** 的函数,这里有一种方法:

    char *cwd[] = { const_cast<char *>("value1"), const_cast<char *>("value2") };

@KunalPuri编辑了我的帖子,请查看我在选项2附近的新免责声明。 - Govind Parmar
@KunalPuri 不确定。然而,OP没有提到修改argv的意图。如果像它的名字所示,它是用来处理传递给程序的参数,我认为这不是需要担心的事情。 - Govind Parmar
@KunalPuri 此外,OP在他的帖子中将cwd声明为不可修改的char *指针数组。这样可以保留他的意图。 - Govind Parmar
如果是为了测试目的,也可以这样做。此外,如果OP不想修改参数,则应在processArgs()中声明const char ** - Kunal Puri
@KunalPuri 我们可能永远也不会知道。猜测意图是毫无意义的。 - Govind Parmar
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接