¿Usando argv en C?

2 minutos de lectura

Para una tarea, debo tener argumentos de línea de comando para mi programa C. He usado argc/argv antes (en C++) sin problemas, pero no estoy seguro de si las cadenas de estilo C afectan el funcionamiento. Aquí está el comienzo de mi principal:

int main(int argc, char *argv[]){

  if(argc>1){
    printf("0 is %s, 1 is %s\n",argv[0],argv[1]);
    if(argv[1]=="-e"){
        // Do some stuff with argv[2]
        system("PAUSE");
    }
    else{
        printf("Error: Incorrect usage - first argument must be -e");
        return 0;
    }
  }

Así que estoy llamando a mi programa como “program.exe -e myargstuff” pero obtengo el resultado “Error: Uso incorrecto…”, aunque mi printf() me dice que argv[1] es “-e”. ¿Alguna ayuda, por favor? ¡Gracias!

  • @Joe: Pareces nuevo en StackOverflow; puede considerar marcar la casilla junto a la respuesta que crea que responde mejor a su pregunta.

    – jgottula

    20 de febrero de 2010 a las 2:27

La línea

if(argv[1]=="-e"){

compara punteros, no cadenas. Utilizar el strcmp función en su lugar:

if(strcmp(argv[1],"-e")==0){

  • Ja ja. 6 respuestas como la mía en el tiempo que me tomó escribir la respuesta.

    – Brandon Bodnar

    20 de febrero de 2010 a las 2:12

  • Bueno, eso lo hizo absolutamente. Gracias por corregir esto, ¡soy muy nuevo en C!

    – José

    20 de febrero de 2010 a las 2:12

Cambiar:

if(argv[1]=="-e"){

para

if(strcmp(argv[1], "-e") == 0){

e incluir string.h.

Verificar getopt() y funciones relacionadas; te hará la vida mucho más fácil.

No puedes comparar c-strings así. Utilice strcmp (referencia aquí).

Debido a que las cadenas c son en realidad punteros, el operador == compara la dirección del primer carácter que nunca será igual en este caso.

no puedes usar == para comparar cadenas como esa en C. Eso es solo comparar las direcciones de argv[1] y su literal, que están prácticamente garantizados para ser diferentes.

Utilizar strcmp en lugar de. p.ej:

if (!strcmp("-e", argv[1])) {

¿Usando argv en C
zneak

El prototipo de la función principal dice que estás tratando con char* punteros En C, no hay sobrecarga de operadores; por lo tanto, == entre dos char* probare si ellos apuntar al mismo lugar. Este no es el caso, y rara vez es el caso en absoluto. Utilizar el strcmp (la referencia de la función es válida aunque apunte a un sitio de C++) función de <string.h>:

strcmp(argv[1], "-e") == 0

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad