Пока разбирать код времени не было, но в самом начале грубая ошибка:memset(buffer1, 0, sizeof(buffer1));
sizeof(buffer1)
вернёт 4 или 8 в зависимости от архитектуры приложения, так как тип buffer1 — char*. При передаче массива в функцию данные о его конкретном типе теряются (Это одна из причин, почему массивы в С++ использовать не рекомендуется)
Из-за этого strcat может отработать некорректно.
(Кстати, пример работы это же как должно быть, правильно?)
EDIT: В вашем случае использование strtok неоправдано, посмотрите в сторону strpbrk и strcspn/strspn
Плюс ваша "защита от переполнения" выделяет слишком маленький буфер. В результате конечный 0 не копируется (не говоря о том, что она ни от чего не защищает и ограничивает возможности использования функции)
Добавьте больше информации об ошибке. Что происходит?