Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: NeoB en 16 Enero 2012, 21:27 pm



Título: Problema la copiar cadena con strcpy
Publicado por: NeoB en 16 Enero 2012, 21:27 pm
Hola, soy nuevo en el foro y se poco de C. Tengo una pequeña duda que me está matando. He probado de un montón de formas y no acierto. Tengo un programa que me pide unos argumentos y al intentar sacarlos con strcpy me devuelve "Violación de segmento". Este es el código:
Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. main(int argc, char *argv[])
  6. {
  7. char *argumento1;
  8. /*Creo que aquí me da el error con "strcpy(&argumento1, argv[1]);" y con otros...*/
  9. if (argumento1=="--help")
  10. {
  11. printf("En construcción.\n");
  12. }
  13. return 0;
  14. }
  15.  
  16.  
¿Alguien me da la forma de copiar argv[1] en argumento1? Gracias de antemano.


Título: Re: Problema la copiar cadena con strcpy
Publicado por: bdoX en 16 Enero 2012, 22:37 pm
Hola: bienvenido al foro. mira, te cuento


Código
  1. /*Creo que aquí me da el error con "strcpy(&argumento1, argv[1]);" y con otros...*/
  2. if (argumento1=="--help")
  3. {
  4. printf("En construcción.\n");
  5. }
  6.  
  7.  
¿Alguien me da la forma de copiar argv[1] en argumento1? Gracias de antemano.

lo que recibe strcpy es una dirección, argumento1 ya es una dirección, asi que no hagas esto "&argumento1". Lo otro, es que argumento1 no tiene memoria reservada, asi que no puedes copiar dentro de esa funcion una cadena determinada.

asi tiene que quedar:

Código
  1. if ( (argumento1  = (char *)malloc (TAM*sizeof (char))) == NULL )
  2. {
  3.    printf ( "Error, no puso asignar memoria\n" );
  4.    return -1;
  5. }
  6.  
  7. strcpy(argumento1, argv[1]);
  8.  

Tampoco puedes comparar cadenas de forma directa

Código:
 if (argumento1=="--help")

tienes que hacerlo con una función que no es para nada dificil de implementar, o simplemente usar la funcion de la string.h llamada strcmp() para hacer comparaciones de cadenas

Yo en particular, compararía la cadena directamente sin necesidad de malgastar memoria, pero supongo que es cosa de gustos.

acá te dejo el codigo:

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. #define TAM 20
  6.  
  7. int main(int argc, char *argv[])
  8. {
  9.    char *argumento1;
  10.  
  11.    if ( argc != 2 )
  12.    {
  13.        printf ( "ERROR: debe ingresar un parametro, pida ayuda al comando help\n" );
  14.        printf ( "Ej: c:\\programa.exe --help\n" );
  15.        return -1;
  16.    }
  17.  
  18.    if ( (argumento1  = (char *)malloc (TAM*sizeof (char))) == NULL )
  19.    {
  20.        printf ( "Error, no puso asignar memoria\n" );
  21.        return -1;
  22.    }
  23.  
  24.    //funcion que copia la cadena de argv[1] y lo deja en argumento1
  25.    strcpy (argumento1, argv[1]);
  26.  
  27.    //funcion que compara cadenas
  28.    if ( !strcmp (argumento1,"--help") )
  29.    {
  30.        printf("En construcción.\n");
  31.    }
  32.    return 0;
  33. }
  34.  



Título: Re: Problema la copiar cadena con strcpy
Publicado por: NeoB en 17 Enero 2012, 17:52 pm
Ok, muchas gracias.