usar sirve significa que para como argumentos arg c++ qt

c++ - sirve - Definiendo propios argumentos principales funciones argc y argv



para que sirve int argc char*argv[] (6)

¿Por qué te preocupas por ti mismo con el tamaño del texto en argv? Simplemente dejaría que el compilador lo hiciera:

int argc = 1; char* argv[] = {"Hello Qt!"}; // exactly as it is defined in main

Quiero crear un objeto de tipo QApplication que necesite los argumentos de las funciones principales argc y argv como entrada:

QApplication app(argc, argv);

Dado que estoy dentro de una función definida por el usuario sin acceso a la función principal, quiero definir estos argumentos por mi cuenta. He intentado varios enfoques, pero no puedo obtener el derecho de conversión de tipo. Mi último enfoque tampoco funcionó:

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

Gracias por cualquier pista.


Aunque ni el estándar C ni el C ++ lo requieren, la mayoría de los compiladores hacen que los argumentos estén disponibles para usted como _argv y _argc. Si la memoria sirve, POSIX lo requiere. De todos modos, necesitas usar algo como:

extern int _argc; extern char *_argv[];

y desde allí puedes usarlos como de costumbre.


Espero que esto funcione:

char* argv[1]; argv[0] = "cgalExample";


Qué tal si...

int argc = 2; const char* argv[] ={"program","first-argument"};

... o si necesitas que no sean constantes ...

int argc = 2; char* argv[] ={strdup("program"),strdup("first-argument")};


Rápido y sucio, pero trabajando para QApplication :

char *argv[] = {"program name", "arg1", "arg2", NULL}; int argc = sizeof(argv) / sizeof(char*) - 1;

Para una solución de conformidad más completa y estándar en C, vea la respuesta de D.Shawley .

Por qué tu solución no funciona es simple:

array[i][j] da como resultado una matriz i*j . Pero lo que realmente quieres es una matriz con punteros a cadenas en ella.


Si quieres ser increíblemente pendante, entonces quieres algo como lo siguiente. Los puntos clave son que argv no es const , argv tiene un final argc , argc es el número de elementos utilizables en argv incluido el nombre del programa . Se requiere que sea modificable, por lo que no puede usar literales de cadena: argv[i] es necesario para apuntar a una matriz de caracteres modificable.

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(); }

La Norma (ISO / IEC 9899: 1999 sección 5.1.2.2.1) establece que lo siguiente es cierto sobre argc y argv en un entorno alojado:

  • El valor de argc será no negativo.
  • argv[argc] será un puntero nulo.
  • Si el valor de argc es mayor que cero, los miembros de la matriz argv[0] través de argv[argc-1] inclusive contendrán punteros a cadenas, a los que el entorno de host proporciona valores definidos por la implementación antes del inicio del programa desde otro lugar en el Ambiente alojado. Si el entorno del host no es capaz de suministrar cadenas con letras tanto en mayúsculas como en minúsculas, la implementación garantizará que las cadenas se reciban en minúsculas.
  • Si el valor de argc es mayor que cero, la cadena apuntada por argv[0] representa el nombre del programa ; argv[0][0] será el carácter nulo si el nombre del programa no está disponible en el entorno host. Si el valor de argc es mayor que uno, las cadenas apuntadas por argv[0] través de argv[argc-1] representan los parámetros del programa .
  • Los parámetros argc y argv y las cadenas señaladas por la matriz argv serán modificables por el programa y conservarán sus últimos valores almacenados entre el inicio del programa y la terminación del programa.

QApplication establece lo siguiente:

Advertencia: los datos a los que hacen referencia argc y argv deben permanecer válidos durante toda la vida útil del objeto QApplication . Además, argc debe ser mayor que cero y argv debe contener al menos una cadena de caracteres válida.

...

Nota: argc y argv pueden cambiarse ya que Qt elimina los argumentos de la línea de comandos que reconoce.