gpt4 book ai didi

c++ - 定义自己的主函数参数 argc 和 argv

转载 作者:IT老高 更新时间:2023-10-28 12:58:45 24 4
gpt4 key购买 nike

我想创建一个 QApplication 类型的对象,它需要主函数参数 argc 和 argv 作为输入:

QApplication app(argc, argv);

因为我在一个用户定义的函数中而无法访问主函数,所以我想自己定义这个参数。我尝试了几种方法,但我无法正确进行类型转换。我的最后一种方法也不起作用:

int argc = 1;
char **argv;
char arguments[1][12] = {{"cgalExample"}};
argv = arguments;

感谢任何提示。

最佳答案

如果你想疯狂地垂头丧气,那么你想要像下面这样的东西。关键是argv不是constargvNULL终止,argcargv 包括程序名称 中可用元素的数量。它必须是可修改的,因此您不能使用字符串文字 - argv[i] 需要指向可修改的字符数组。

int my_main() {
char arg0[] = "programName";
char arg1[] = "arg";
char arg2[] = "another arg";
char* argv[] = { &arg0[0], &arg1[0], &arg2[0], NULL };
int argc = (int)(sizeof(argv) / sizeof(argv[0])) - 1;

QApplication the_application(argc, &argv[0]);
return the_application.run();
}

标准(ISO/IEC 9899:1999 第 5.1.2.2.1 节)声明以下关于托管环境中的 argcargv 的情况是正确的:

  • argc 的值应为非负数。
  • argv[argc] 应为空指针。
  • 如果argc的值大于零,则数组成员argv[0]到< strong>argv[argc-1] 应包含指向字符串的指针,这些指针在程序从宿主环境中的其他地方启动之前由宿主环境给出实现定义的值。如果宿主环境不能提供包含大写和小写字母的字符串,则实现应确保以小写形式接收字符串。
  • 如果argc的值大于零,则argv[0]指向的字符串表示程序名argv[0][0] 如果程序名称在主机环境中不可用,则应为空字符。如果argc的值大于1,则argv[0]所指向的字符串>argv[argc-1]代表程序参数
  • 参数argcargv以及argv指向的字符串 数组应可由程序修改,并在程序启动和程序终止之间保留其最后存储的值。

QApplication声明如下:

Warning: The data referred to by argc and argv must stay valid for the entire lifetime of the QApplication object. In addition, argc must be greater than zero and argv must contain at least one valid character string.

Note: argc and argv might be changed as Qt removes command line arguments that it recognizes.

关于c++ - 定义自己的主函数参数 argc 和 argv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1519885/

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