2010-02-20 33 views
6

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 están afectando a cómo funciona esto. Aquí es el comienzo de mi principal:Usando argv en C?

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 yo estoy recibiendo el "Error: Uso incorrecto ..." de salida, aunque mi printf() me dice que argv [1] es "-e". Alguna ayuda, por favor? ¡Gracias!

+0

@ Joe: Usted parece nuevo en StackOverflow; puede considerar marcar la casilla al lado de la respuesta que considere mejor para su pregunta. – jgottula

+0

¡Gracias por el consejo! – Joe

Respuesta

14

La línea

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

compara punteros, no cadenas. Utilice la función strcmp lugar:

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

Haha. 6 respuestas como la mía en el tiempo que me llevó escribir la respuesta. –

+0

Bueno, eso definitivamente lo hizo. Gracias por corregir esto, soy muy nuevo en C! – Joe

3

No se puede comparar c-cuerdas por el estilo. Use strcmp (referencia here).

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

2

No puede usar == para comparar cadenas como la de C. Eso es simplemente comparar las direcciones de argv [1] y su literal, que se garantiza que son diferentes.

Use strcmp en su lugar. por ejemplo:

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

Cambio:

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

a

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

e incluyen string.h.

5

Consulte getopt() y funciones relacionadas; Hará tu vida mucho más fácil.

1

El prototipo de la función principal dice que se trata de punteros char*. En C, no hay sobrecarga del operador; por lo tanto, == entre dos char* probará si ellos apuntan al mismo lugar. Este no es el caso, y rara vez es el caso en absoluto. Utilice el strcmp (la referencia para la función es válida a pesar de que apunta a un sitio de C++) la función de <string.h>:

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