Вы можете просто изменить:
unsigned char buff[20] = "Michael";
unsigned char dst[20] = "Jackson";
на
char buff[20] = "Michael";
char dst[20] = "Jackson";
Если логически представить, строка не может быть подписана или не подписана, это не числовое значение для обработкитаким образом, это просто массив символов, и вы должны объявить и использовать его так.
Почему вы получаете ошибку?
strcpy
имеет прототип:
char *strcpy(char *restrict s1, const char *restrict s2);
И то, что вы передаетеunsigned char*
, когда вызывается функция, выполняется проверка типа параметра, и компилятор обнаруживает, что вы не вызываете функцию с правильными параметрами типа, и, следовательно, он жалуется на это. Когда вы применяете приведение, аргументы функции совпадают и, следовательно,сборник проходит.
Приводит ли приведение типов к типу char в строковой функции какие-либо проблемы? *
Нет, в этом случае это не так.
Хотя это и делаетбольше смысла изменить использование unsigned char
по причинам, указанным выше в ответе.
Предложение:
Strcpy
небезопасно, поэтому вам гораздо лучше использоватьstrncpy
, это позволяет вам явно указывать, сколько символов копировать, а не полагаться на нулевой терминатор исходной строки. Также это помогает избежать переполнения буфера, поскольку вы явно указываете длину.