Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Rom_Stom en 15 Junio 2016, 00:30 am



Título: ayuda con strcpy en kubuntu
Publicado por: Rom_Stom en 15 Junio 2016, 00:30 am
Hola a todos, estoy aprendiendo en esto de la programación y realmente me ha costado algo de trabajo, por eso pido su ayuda para saber por que no puedo compilar este código con el cual estaba practicando unos ejercicios que me encontré, este es el código:

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

#define PERS 3



void main()
{
  int edades[PERS];
  char nombres[PERS][25];
  char may_nom[25];
  int may=0,i;
 
  for(i=0; i<PERS; i++)
  {
    printf("Persona %i\n", i+1);
    printf("Nombre: ");
    fflush(stdin );
    scanf("%c", nombres);
    printf("Edad:");
    scanf("%i", &edades);
  }
 
  for(i=0; i<PERS; i++)
  {
    if(edades>= may)
    {
      may=edades;
      strcpy(may_nom, nombres);
    }
  }
 
  printf("La persona con %s tiene la mayor edad %i", may_nom, may);
 
  system("PAUSE");
}


El error que me marca es:

incompatible implicit declaration of built-in function ‘strcpy’ [enabled by default]
       strcpy(may_nom, nombres);

Gracias por su ayuda de antemano.




Título: Re: ayuda con strcpy en kubuntu
Publicado por: class_OpenGL en 15 Junio 2016, 00:38 am
El 'warning' ese se produce porque no has incluido 'string.h', sino que has incluido 'strings.h'.

Otra cosa, cuando trabajas con los arreglos no accedes a estos con los corchetes. ¿Error al copiar o que simplemente no los has puesto?

Código
  1. scanf("%c", nombres); // Tendría que ser scanf("%c", nombres[i]);
Hay más casos en los que no pones los corchetes.


Título: Re: ayuda con strcpy en kubuntu
Publicado por: BloodSharp en 15 Junio 2016, 00:44 am
strcpy(may_nom, nombres);

incompatible implicit declaration of built-in function ‘strcpy’ [enabled by default]
may_nom, nombres);

Eso es porque el segundo parámetro debe ser una dirección de tipo char constante...
char * strcpy ( char * destination, const char * source ); (http://www.cplusplus.com/reference/cstring/strcpy/)

Prueba así:

Código
  1. strcpy(may_nom[i],(const char*)nombres[i]);


B#


Título: Re: ayuda con strcpy en kubuntu
Publicado por: class_OpenGL en 15 Junio 2016, 01:01 am
C no es tan estricto en ese sentido, así que no tiene sentido que te salte esa advertencia. Por ejemplo, he compilado el siguiente código diciéndole al compilador que me de alertas (-Wall), y no me ha dado ninguna:

Código
  1. #include <string.h>
  2.  
  3. int main() {
  4.    char nombre[] = "Nombre";
  5.    char copia[64];
  6.  
  7.    strcpy(copia, nombre);
  8.  
  9.    return 0;
  10. }


Título: Re: ayuda con strcpy en kubuntu
Publicado por: AlbertoBSD en 15 Junio 2016, 01:03 am
Es "%s"

Código
  1. scanf("%s", nombres[i]);

pero recomiendo mejor fgets para evitar el uso de fflush

Código
  1. fgets(nombres[i],25,stdin);

Asi tambien limitamos la entrada a un maximo de 25 caracteres.

Y en lugar de strcpy mejor strncpy

Código
  1. strncpy(may_nom[i],nombres[i],strlen(nombres[i]));


Saludos




Título: Re: ayuda con strcpy en kubuntu
Publicado por: Rom_Stom en 15 Junio 2016, 03:46 am
El 'warning' ese se produce porque no has incluido 'string.h', sino que has incluido 'strings.h'.

Otra cosa, cuando trabajas con los arreglos no accedes a estos con los corchetes. ¿Error al copiar o que simplemente no los has puesto?

Código
  1. scanf("%c", nombres); // Tendría que ser scanf("%c", nombres[i]);
Hay más casos en los que no pones los corchetes.


Muchas gracias por la ayuda ahora si ya pude compliarlo


Título: Re: ayuda con strcpy en kubuntu
Publicado por: Rom_Stom en 15 Junio 2016, 03:47 am
Es "%s"

Código
  1. scanf("%s", nombres[i]);

pero recomiendo mejor fgets para evitar el uso de fflush

Código
  1. fgets(nombres[i],25,stdin);

Asi tambien limitamos la entrada a un maximo de 25 caracteres.

Y en lugar de strcpy mejor strncpy

Código
  1. strncpy(may_nom[i],nombres[i],strlen(nombres[i]));


Saludos






Hice los cambios sugeridos muchas gracias