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.
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;
}