memset quería decir (lapsus). Se usa para rellenar grandes zonas de memoria con un valor determinado.
Código:
#include <cstring>
void *memset(void *s, int c, size_t n);
Como veo que habías usado strlen que es de C, no te importará ya usar memset.
s es el puntero a la dirección a rellenar, buffer.
c es el caracter que se escribirá, 0.
n es el número de caracteres que se escribirán.
Devuelve el puntero.
En teoría solo deberías inicializar el último, porque los demás los rellenas y es mucho más rápido:
buffer[size] = '\0';