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.
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.
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 ); (http://www.cplusplus.com/reference/cstring/strcpy/)
Prueba así:
strcpy(may_nom[i],(const char*)nombres[i]);
B#
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;
}
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
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
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