Ver Mensaje Individual
  #4 (permalink)  
Antiguo 18/11/2010, 17:00
margarito04
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: substr() para C

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
  1. #include "stdafx.h"
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. char* substr(char* cadena, int comienzo, int longitud=0)
  6. {
  7.     if (longitud == 0)
  8.         longitud = strlen(cadena)-comienzo;
  9.    
  10.     char *nuevo = (char*)malloc(sizeof(char) * (longitud+1));
  11.     nuevo[longitud] = '\0';
  12.     strncpy(nuevo, cadena + comienzo, longitud);
  13.    
  14.     return nuevo;
  15. }
  16.  
  17. int main (void) {
  18.         char *var = "abcdef";
  19.         char buffer[6]="";
  20.     //UTILIZANDO strncpy Y strcpy
  21.     printf("%s\n", strncpy(buffer, &var[2], 3));    //devuelve "cde"
  22.     printf("%s\n", strcpy(buffer, &var[2]));    //devuelve "cdef"
  23.  
  24.     //Utilizando tu propuesta
  25.     var = substr("abcdef", 2, 3);
  26.     printf("%s\n", var);    //devuelve "cde"
  27.     free(var);
  28.  
  29.     var = substr("abcdef", 2);
  30.     printf("%s\n", var);    //devuelve "cdef"
  31.     free(var);
  32.     return 0;
  33.  
  34. }

Última edición por margarito04; 18/11/2010 a las 17:07