Вместо этого вы должны использовать strcpy (если вы знаете длину ввода) или безопасную функцию.
Многие другие ответы совершили ту же ошибку, оставив незавершенные строки основным источником уязвимостей в безопасности.
Правильный способ - использовать безопасную функцию копирования строк, например StringCbCopy, или свернуть свою собственную (хотя и не настолько надежную):
// Copy at most n-1 characters to dst, truncating if strlen(src) > n-1
// and guaranteeing NUL-termination.
void safe_strcpy(char *dst, const char *src, size_t n) {
strncpy(dst, src, n-1);
dst[n-1] = 0; // Guarantee NUL-termination.
}
Тогда вы можете использовать его следующим образом
void f(const char *title, const char *author) {
BookType book;
safe_strcpy(book.title, title, sizeof book.title);
safe_strcpy(book.author, author, sizeof book.author);
}