Lo siento, soy un novato en C. Lo que estoy tratando de hacer es imprimir algo, si –help parámetro se entra a la terminal como ./program --help. Así, el código es este:

char *HELP = "--help";
char *argv1 = argv[1];

if (argv1 == HELP) {
    printf("argv[1] result isaa %s\n", argv[1]);
}

Por lo que incluso si yo uso –help parámetro no pasa a través de la condición del if. Así que lo que podría ser la razón detrás de todo esto?

  • Tenga en cuenta que usted tendrá que incluir diferentes .h archivos en cualquier momento de llamar a las funciones. Así, su pregunta acerca de warning: implicit declaration of function ‘strcmp’ pueden ser respondidas por escribir el comando man strcmp que le dirá que el archivo de su función se define en y por lo tanto debe ser incluida. (Si su sistema operativo no es basados en *nix, google acaba de ‘el hombre strcmp’ para obtener la misma información)
InformationsquelleAutor Sarp Kaya | 2012-08-23

6 Comentarios

  1. 12

    Que no es la forma de comparar cadenas en C. Uso strcmp o strncmp:

    if (strcmp(argv1, HELP) == 0)

    Incluyen string.h para obtener acceso a esos.

    • aviso: declaración implícita de la función ‘strcmp’ [-Wimplicit-función-declaración]
    • @SarpKaya #include <string.h>
    • Para un principiante, es (en mi opinión) mucho más clara para comparar contra 0, en lugar de utilizar el ! operador.
    • De acuerdo.
  2. 4

    Que es la comparación de las direcciones, no el contenido. Uso strcmp():

    if (0 == strcmp(HELP, argv1))
    {
        printf("argv[1] result isaa %s\n", argv[1]);
    }

    Asegúrese de comprobar que argc > 1 antes de acceder a argv[1].

  3. 3

    En C, no hay ningún tipo de cadena. Usted ha declarado char *HELP, por lo que la AYUDA es un char *, no una cadena. En el si, se están comparando dos punteros, en lugar de la cadena que elija.
    Usted querrá llamar a strcmp (comparación en cadena), una función que recibe dos char *, y compara las cadenas de caracteres apuntada por ellos.

  4. 0

    char *HELP = "--help"; – Aquí --help es un literal de cadena, que es de sólo lectura de los datos en el segmento de texto. Usted está a sólo assining la dirección de la variable de puntero HELP.

    `argv[1] dado que la dirección en la que la primera línea de comandos arguemet se almacena.

    Así argv[1] y HELP tienen diferentes direcciones. Por lo tanto la condición (argv[1] == HELP) es sólo la comprobación de la dirección almacenada en estas dos variables de puntero. Siempre se producirá un error.

    Realmente tiene que comparar el contenido de estos dos pionters. Para ello se puede impelement la cadena lógica de comparación o utilizar el strcmp función.

    if (0 == strcmp(argv[1], HELP)
    {
        //do your stuff
    }
  5. 0

    Yo tenía el mismo problema. mi problema es resuelto mediante el uso de strncmp.

    strcmp no trabaja para mi problema de todos modos

    #include <string.h>
    
    
        if (strncmp(argv1, HELP,6) == 0) //6 is size of argument
        {
        //do smt
        }

Dejar respuesta

Please enter your comment!
Please enter your name here