Ваш вопрос неясен, так как код имеет мало смысла или вообще не имеет смысла. Ваш ввод не может быть длиннее 20 символов, так как получаемый массив состоит всего из 20 символов. Если пользователь вводит больше, ваша программа выдаст неопределенное поведение. Итак, главная проблема здесь не в ограничении копии, а в ограничении ввода.
Однако ваш вопрос, похоже, касается копирования строк ограниченной длины. Если это то, что вам нужно, то, к сожалению, в стандартной библиотеке нет выделенной функции для этой цели. Многие реализации предоставляют нестандартную функцию strlcpy
, которая делает именно это. Так что, либо проверьте, обеспечивает ли ваша реализация strlcpy
, либо самостоятельно внедрите strlcpy
.
Во многих случаях вы можете увидеть советы по использованию strncpy
в таких случаях. В то время как можно побить strncpy
к работе для этой цели, в действительности strncpy
не предназначен для использования таким образом. Использование strncpy
в качестве функции копирования строк ограниченной длины всегда является ошибкой. Избегайте этого.