Problema la copiar cadena con strcpy

Iniciado por NeoB, 16 Enero 2012, 21:27 PM

0 Miembros y 1 Visitante están viendo este tema.

NeoB

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:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

main(int argc, char *argv[])
{
char *argumento1;
/*Creo que aquí me da el error con "strcpy(&argumento1, argv[1]);" y con otros...*/
if (argumento1=="--help")
{
printf("En construcción.\n");
}
return 0;
}


¿Alguien me da la forma de copiar argv[1] en argumento1? Gracias de antemano.

bdoX

Hola: bienvenido al foro. mira, te cuento

Cita de: NeoB en 16 Enero 2012, 21:27 PM


/*Creo que aquí me da el error con "strcpy(&argumento1, argv[1]);" y con otros...*/
if (argumento1=="--help")
{
printf("En construcción.\n");
}


¿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:


if ( (argumento1  = (char *)malloc (TAM*sizeof (char))) == NULL )
{
   printf ( "Error, no puso asignar memoria\n" );
   return -1;
}

strcpy(argumento1, argv[1]);


Tampoco puedes comparar cadenas de forma directa

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:


#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define TAM 20

int main(int argc, char *argv[])
{
   char *argumento1;
   
   if ( argc != 2 )
   {
       printf ( "ERROR: debe ingresar un parametro, pida ayuda al comando help\n" );
       printf ( "Ej: c:\\programa.exe --help\n" );
       return -1;
   }
   
   if ( (argumento1  = (char *)malloc (TAM*sizeof (char))) == NULL )
   {
       printf ( "Error, no puso asignar memoria\n" );
       return -1;
   }
   
   //funcion que copia la cadena de argv[1] y lo deja en argumento1
   strcpy (argumento1, argv[1]);
   
   //funcion que compara cadenas
   if ( !strcmp (argumento1,"--help") )
   {
       printf("En construcción.\n");
   }
   return 0;
}



NeoB