Редактировать: Я добавил источник для примера.Зачем использовать strncpy вместо strcpy?
я наткнулся на this example:
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);
который произвел этот вывод:
destination is originally = 'abcdefg' After strcpy, destination becomes '123456789' destination1 is originally = 'abcdefg' After strncpy, destination1 becomes '12345fg'
Что заставляет меня задаться вопросом, почему кто-то хочет этот эффект. Похоже, это было бы странно. Эта программа заставляет меня думать, что вы можете в основном копировать чье-то имя (например, Tom Brokaw) с Tom Bro763.
Каковы преимущества использованияstrncpy()
надstrcpy()
?
Я думаю, что вы имели в виду, чтобы спросить: "Почему на Земле будет кто-нибудь использовать' strcpy' вместо 'strncpy'?" –
Когда я был TA для первого курса программирования семестра в C, я заверил своих студентов в том, что любое использование методов типа 'getline' приведет к неправильным результатам, когда я сравню их с тщательно обработанными входами. :) –
Я думаю, вы неправильно поняли, что на самом деле делает код. Присмотритесь. –