LO QUE HACE LA FUNCIÓN QUE TU PROPONES SE PUEDE HACER CON strncpy, AUQUE EN ESTE CASO SERÍA NECESARIO UTILIZAR UTILIZAR UN BUFFER.
TU SOLUCION TIENE EL INCONVENIENTE LA MEMORIA QUE LE ASIGNAS A nuevo NUNCA ES LIBERADA, PARA QUE NO SUCEDA ESTO PUEDES UTILIZAR UN BUFFER COMO EN strncpy, O LIBERAR LA MEMORIA ASIGNADA ...
EL SIGUIENTE CÓGIDO TE MUESTRO COMO HACER LO MISMO PERO CON strncpy Y strcpy, MODIFIQUE UN POCO TU FUNCION YA QUE TENIA ALGUNOS INCONVENTIENTES, ADEMAS TE MUESTRO COMO UTILIZAR TU FUNCION UTILIZANDO MEMORIA DINAMICA PARA QUE NO QUEDE LACK MEMORY, QUE ES MEMORIA NO LIBERADA LIBERADA.
Código C++:
Ver original#include "stdafx.h"
#include <string.h>
#include <stdlib.h>
char* substr(char* cadena, int comienzo, int longitud=0)
{
if (longitud == 0)
longitud
= strlen(cadena
)-comienzo
;
char *nuevo
= (char*)malloc(sizeof(char) * (longitud
+1)); nuevo[longitud] = '\0';
strncpy(nuevo
, cadena
+ comienzo
, longitud
);
return nuevo;
}
int main (void) {
char *var = "abcdef";
char buffer[6]="";
//UTILIZANDO strncpy Y strcpy
//Utilizando tu propuesta
var = substr("abcdef", 2, 3);
printf("%s\n", var
); //devuelve "cde"
var = substr("abcdef", 2);
printf("%s\n", var
); //devuelve "cdef" return 0;
}