strcpy()
и strcat()
- это функции, которые работают с «строками». Один char
не является строкой (в C).
strcpy()
, а также strcat()
принимают указатели на 1-й элемент char
-определенного массива *1009* (который вфакт, что C использует в качестве того, что другие языки называют «строкой»).
Код, который вы показываете, не передает это для второго аргумента функций, а передает только один char
.
Что касается сообщения об ошибке.
Чтобы исправить это, есть несколько подходов.
Чтобы использовать функции, работающие со строками, нужно как-то сделать char
добавить строку. Это можно сделать с помощью составного литерала, например, так:
strcpy(fullPw, (char[2]){c});
Этот (char)[2]
определяет безымянную переменную типа char[2]
, инициализирует 1-й элемент в c
и неявно инициализирует 2-й элемент в'\0'
. Который в целом является "строкой" размером в 1 символ. Передача в strcpy()
приводит к распаду по адресу 1-го элемента, в char*
.
То же самое для strcat()
.
Кстати, этот strcat(fullPw, "\n");
используется правильноas "\n"
- строковый литерал, который определяет массив из 2 символов, для 1-го элемента установлено значение '\ n', а для 2-го - '\0'
. Следуя вышеприведенному подходу, это также можно записать как strcat(fullPw, (char[2]){'\n'});
Также обратите внимание, что время жизни таких «неназванных» переменных является текущей областью действия. Поэтому, если вы хотите убедиться, что они были освобождены сразу после их использования, то есть внутри вызываемых функций, то заключите эти вызовы в свою область видимости, например, так:
{
strcpy(fullPw, (char[2]){c});
}