Конечно, есть способы - просто ничего встроенного. Многие служебные библиотеки C имеют функции для этого - например, glib's g_strjoinv . Вы также можете свернуть свои собственные, например:
static char *util_cat(char *dest, char *end, const char *str)
{
while (dest < end && *str)
*dest++ = *str++;
return dest;
}
size_t join_str(char *out_string, size_t out_bufsz, const char *delim, char **chararr)
{
char *ptr = out_string;
char *strend = out_string + out_bufsz;
while (ptr < strend && *chararr)
{
ptr = util_cat(ptr, strend, *chararr);
chararr++;
if (*chararr)
ptr = util_cat(ptr, strend, delim);
}
return ptr - out_string;
}
Основная причина, по которой он не встроен, в том, что стандартная библиотека C очень минимальна; они хотели упростить создание новых реализаций C, чтобы вы не нашли столько полезных функций. Существует также проблема, заключающаяся в том, что C не дает вам много рекомендаций о том, как, например, решить, сколько элементов в массивах (в приведенном выше примере я использовал соглашение об ограничении NULL-массива-элемента).