ayuda con strcpy en kubuntu

Iniciado por Rom_Stom, 15 Junio 2016, 00:30 AM

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

Rom_Stom

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.



class_OpenGL

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?

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

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL

BloodSharp

Cita de: Rom_Stom en 15 Junio 2016, 00:30 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 );

Prueba así:

strcpy(may_nom[i],(const char*)nombres[i]);


B#



class_OpenGL

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:

#include <string.h>

int main() {
    char nombre[] = "Nombre";
    char copia[64];
   
    strcpy(copia, nombre);
   
    return 0;
}

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL

AlbertoBSD

#4
Es "%s"

scanf("%s", nombres[i]);

pero recomiendo mejor fgets para evitar el uso de fflush

fgets(nombres[i],25,stdin);

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

Y en lugar de strcpy mejor strncpy

strncpy(may_nom[i],nombres[i],strlen(nombres[i]));


Saludos


Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

Rom_Stom

Cita de: 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?

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

Rom_Stom

Cita de: AlbertoBSD en 15 Junio 2016, 01:03 AM
Es "%s"

scanf("%s", nombres[i]);

pero recomiendo mejor fgets para evitar el uso de fflush

fgets(nombres[i],25,stdin);

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

Y en lugar de strcpy mejor strncpy

strncpy(may_nom[i],nombres[i],strlen(nombres[i]));


Saludos






Hice los cambios sugeridos muchas gracias