¿Por qué debería usar strncpy en lugar de strcpy?

Edición: he añadido la fuente para el ejemplo.

Me encontré coneste ejemplo:

char source[MAX] = "123456789";
char source1[MAX] = "123456789";
char destination[MAX] = "abcdefg";
char destination1[MAX] = "abcdefg";
char *return_string;
int index = 5;

/* This is how strcpy works */
printf("destination is originally = '%s'\n", destination);
return_string = strcpy(destination, source);
printf("after strcpy, dest becomes '%s'\n\n", destination);

/* This is how strncpy works */
printf( "destination1 is originally = '%s'\n", destination1 );
return_string = strncpy( destination1, source1, index );
printf( "After strncpy, destination1 becomes '%s'\n", destination1 );

Lo que produjo esta salida:

destination is originally = 'abcdefg'
After strcpy, destination becomes '123456789'

destination1 is originally = 'abcdefg'
After strncpy, destination1 becomes '12345fg'

Lo que me hace preguntarme por qué alguien querría este efecto. Parece que sería confuso. Este programa me hace pensar que básicamente podría copiar el nombre de alguien (por ejemplo, Tom Brokaw) con Tom Bro763.

¿Cuáles son las ventajas de usar strncpy() terminado strcpy()?

Respuestas a la pregunta(10)

Su respuesta a la pregunta