Cita de: bash en 29 Septiembre 2016, 23:28 PM
lamentablemente no encontre ninguna que haga esto eficientemente
Si estás en C++, la clase string tiene el método substr.
Además, la librería algorithm de la librería estándar también, tiene funciones para manejar contenedores (string incluido).
A parte:
- Pusiste de retorno de la función ini.
- (char *)calloc(inlen, sizeof(char ));: inlen es 0. Quizás quisieras decir this->inlen.
- strncpy( szEnd, &this->szChars[end], inlen);: si lo que querías decir ahí era this->inlen, ten en cuenta que vas a copiar caracteres fuera del rango, y probablemente, de la memoria de tu cadena.
Luego, yo cambiaría calloc y strncpy por malloc y memcpy, poniendo posteriormente el caracter nulo al final de las cadenas. Ya a tu gusto.
Y bueno, estás reservando memoria 4 veces. Puedes hacer esta función reservando memoria solo 1 vez (o ninguna si reutilizas la memoria que ya había, dejando que sobre espacio). Además, coges memoria de un tamaño excesivo.
La cadena tendrá 3 partes:
Código [Seleccionar]
--- A ---|beg| --- B --- |end| --- C ---
Deberías reservar solo memoria de tamaño A + C + 1 (caracter nulo). Con eso, te llegará.