"s" - это не один символ, это строковый литерал с типом char *
's' - это константа из одного символа, тип которой int.
Строковый литерал в C требует двойных кавычек, а printf () имеет спецификатор формата% s для печати строковых литералов.
Символьная константа в C требует одинарных кавычек, а printf () имеет спецификатор формата% c для их печати.
Теперь ваш код,
printf("I have %d friend%c", friends , (friends != 1 ? "s" : ""));
вернет строковый литерал, поскольку
"s" or " "
является строковым литералом, а printf () требует, чтобы формат определял "% s" для их печати.
если вы хотите использовать спецификатор формата% c в фрагменте кода, тогда используйте символьную константу 's' вместо строкового литерала "s"
printf("I have %d friend%c", friends , (friends != 1 ? 's' : ' '));
^
Также обратите внимание, что между одинарными кавычками должен быть пробел, как показано над символом каретки, иначе это приведет к ошибке : пустая символьная константа.
В случае строковых литералов допускается пустая строка.