Análisis ‘?’ en lugar

void display(char * str){ printf("%s: Missing file\n", str); } int main(int argc, char **argv) { int longIndex, opt = 0; const char *optString = "h?"; static const struct option longOpts[] = { { "help", no_argument, NULL, 'h' }, { NULL, no_argument, NULL, 0 } }; opt = getopt_long( argc, argv, optString, longOpts, &longIndex ); while( opt != -1 ) { switch( opt ) { case 'h': case '?': display(argv[0]); break; default: break; } opt = getopt_long( argc, argv, optString, longOpts, &longIndex ); } return 0; } 

Este código comstack bien pero cuando lo ejecuto como:

 ./a.out ? 

no se llama pantalla. ¿Qué me estoy perdiendo?

El signo de interrogación ‘?’ es devuelto por getopt cuando encuentra un argumento que no está en la cadena de opciones o si detecta un argumento de opción faltante, por lo que no debe usar ‘?’ en el optstring porque está reservado para eso, en lugar de eso, debes usar la ‘h’ más convencional para obtener ayuda.

Ver la pagina del manual

Edición: Este es un ejemplo:

 switch (opt) { case 'n': some_flag = 1; break; case 'h': /* help */ default: /* '?' unknown opt or missing arg*/ fprintf(stderr, "Usage: %s [-n nsecs] \n", argv[0]); exit(EXIT_FAILURE); } 

const char * optString = “h?”;

Por encima de la línea, reemplazar con la siguiente línea

const char * optString = “h \?”;

Este es el literal del signo de interrogación en lenguaje C