gpt4 book ai didi

c++ - C 字符串数组,用字符串文字初始化

转载 作者:行者123 更新时间:2023-11-30 00:48:09 26 4
gpt4 key购买 nike

Ghostscript interpreter API有一个功能

GSDLLEXPORT int GSDLLAPI gsapi_init_with_args(void *instance, int argc, char **argv)

最后一个参数 argv 是一个指向 C 字符串数组的指针,它被解释为命令行参数。我显然不能更改函数 gsapi_init_with_args 的签名以采用 const char ** 参数。

如果我愿意忽略(或沉默)deprecated conversion from string constant to 'char*' 警告,那么我会简单地写

char *gs_argv[] = {"", "-dNOPAUSE", "-dBATCH", ...};

并传递 gs_argv 作为最后一个参数。但我更愿意修复我的代码,这样我就不会依赖外部函数以我期望的方式运行(并有效地将 gs_argv 视为 const char**).

有没有什么简单的方法可以将 gs_argv 声明为指向(非 const)C 字符串的指针数组,并使用字符串文字初始化其元素? (也就是说,使用与初始化单个 C 字符串类似的方法:使用 char c_str[] = "abc"。)我能想到的最好的方法是使用

const char *gs_argv0[] = {"", "-dNOPAUSE", "-dBATCH", ...};

然后将内容逐个元素复制到 gs_argv 中。


请注意,我理解为什么编译器会发出此警告(并且已经阅读了 this question 等问题的答案)。我要求的是解决方案,而不是解释。

最佳答案

您可以使用:

char arg1[] = "";
char arg2[] = "-dNOPAUSE";
char arg3[] = "-dBATCH";

char* gs_argv0[] = {arg1, arg2, arg3, NULL};
int argc = sizeof(gs_argv0)/sizeof(gs_argv0[0]) - 1;
gsapi_init_with_args(instance, argc, gs_argv0)

关于c++ - C 字符串数组,用字符串文字初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32484688/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com