Yo también soy partidario de que el código no tenga warnings, porque para algo están... De hecho si tuvieses un compilador de C puro no sólo te saldrían warnings ahí, por ejemplo el comentario de línea en C no se debe hacer así, el main ha de ser int (porque al main se le puede llamar desde otro sitio e interesa saber si ha finalizado bien)...
En cuanto al warning del gets( ) es evidente, no es nada recomendado usarla, si le echas un vistazo al código de verás por qué... De qué te sirve declarar un vector a y un vector b de X espacio si el gets se lo va a saltar a la torera... Para eso declaramos uno dinámico y vamos aumentándolo nosotros... Prueba a meter más carácteres y verás que te los imprime igual. Pero bueno, si es para una aplicación de andar por casa puedes hacer lo que te salga, como si lo llenas de gotos o breaks, allá cada cual con lo que haga.
Poniéndolo así no tendrás el problema de los apellidos, no te saltarán warnings y te evitas el gets( ):
Código c:
Ver original/*Máximo de carácteres del nombre o apellidos.*/
#define MAX_CAR 20
#include<stdio.h>
/*Incluyo conio.h porque en este foro os encanta usar getch() al final pero bue xD.*/
#include<conio.h>
int main(){
char a[MAX_CAR], b[MAX_CAR];
int i;
i=-1;
do{
++i;
}while(a[i]!='\n' && i<MAX_CAR);
a[i]='\0';
i=-1;
do{
++i;
}while(b[i]!='\n' && i<MAX_CAR);
b[i]='\0';
printf("El Nombre es: %s %s \n", a
, b
); return 0;
}
Como ves la recogida del nombre y los apellidos es exactamente lo mismo, así que podriámos llamar a una función leeCadena(a, MAX_CAR);