Если вы хотите быть безумно подвесным, вам нужно что-то вроде следующего. Ключевыми моментами являются то, что argv
не является const
, argv
является NULL
завершенным, argc
является количеством используемых элементов в argv
, включая имя программы . Он должен быть изменяемым, поэтому вы не можете использовать строковые литералы - 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) гласит, что в отношении argc
и argv
в размещенной среде верно следующее:
- Значение
argc
должно быть неотрицательным.
argv[argc]
должен быть нулевым указателем.
- Если значение
argc
больше нуля, элементы массива от argv[0]
до argv[argc-1]
включительно должны содержать указатели на строки, которым передаются значения, определяемые реализацией средой хоста до запуска программы из другого места в среде хоста. Если среда хоста не способна снабжать строки буквами как в верхнем, так и в нижнем регистре, реализация должна обеспечивать получение строк в нижнем регистре.
- Если значение
argc
больше нуля, строка, на которую указывает argv[0]
, представляет имя программы ; argv[0][0]
должен быть нулевым символом, если имя программы недоступно из среды хоста. Если значение argc
больше единицы, строки, на которые указывают argv[0]
- argv[argc-1]
, представляют программные параметры .
- Параметры
argc
и argv
и строки, на которые указывает массив argv
, должны изменяться программой и сохранять их последние сохраненные значения между запуском программы и завершением программы.
QApplication
гласит следующее:
Предупреждение: Данные, на которые ссылаются argc
и argv
, должны оставаться действительными для
всю жизнь QApplication
объект. Кроме того, argc
должно быть
больше нуля и argv
должны
содержать хотя бы один действительный символ
строка.
...
Примечание: argc
и argv
могут быть изменены
поскольку Qt удаляет аргументы командной строки
что он признает.