Edycja: dodałem źródło dla przykładu.
Natknąłem się na ten przykład :
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 );
Który wyprodukował ten wynik:
miejsce docelowe to pierwotnie = 'abcdefg' Po strcpy miejsce docelowe staje się „123456789” miejsce docelowe1 pierwotnie = 'abcdefg' Po strncpy miejsce docelowe1 zmienia się na „12345fg”
Zastanawiam się, dlaczego ktoś miałby chcieć tego efektu. Wygląda na to, że byłoby to zagmatwane. Ten program sprawia, że myślę, że można by w zasadzie skopiować czyjeś nazwisko (np. Tom Brokaw) z Tomem Bro763.
Jakie są zalety używania strncpy()
nad strcpy()
?
strcpy
zamiaststrncpy
?”.