/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Subcadena truncada

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
Xedrox



Registrado: 27 Dic 2012
Mensajes: 20

MensajePublicado: 01/08/2013 7:21 am
Título: Subcadena truncada

Buenos dias,

Estoy teniendo muchos problemas al querer extrar una subcadena de una cadena. Tengo la siguiente funcion para hacerlo

Código:

char *subCadena(char *cadena,int comienzo,int longitud)
{
    int aux=longitud+1;
   char *nuevo = (char*) malloc(aux);
   
   for(int i=0;i<aux;i++)
   {
      nuevo[i]=cadena[comienzo+i];
   }
   nuevo[aux]='\0';
   
   return nuevo;
}



Y la utilizo de la siguiente manera, lo unico que quiero hacer es imprimir es su contenido, caracter por caracter:

Código:

char *a=subCadena(cadena,48,144);
for(int j=0;j<144;j++)
{
      printf("%c",a[j]);
}


El problema es que al ejecutar, lo unico que me trae son los primeros 78 caracteres nada mas. Alguna idea que puede ser? La cadena completa es la siguiente:

Código:

MMMM1111111100              [NUL][FS]KzÑ[DC2][NUL]ÿ[NUL][NUL][NUL]ÿC[NUL][NUL][NUL][NUL][NUL][NUL][STX]111  1111111111     XXXXX 1148462014 1111111111             1111111111     111[NUL][NUL][NUL][NUL][NUL][NUL][NUL][NUL]000000[NUL][NUL][NUL][NUL][NUL][NUL][NUL][NUL] ....SJDFHKSDFHSJHFSKJHFDKJSHDFSHKFHSKDJFHSKHFDKSJDHFJSDHKFHSDKFJSDJFHSKJHFKSHDJSDFHKSJF


Lo que esta entre corchetes son solo un caracter, pero asi me lo muestra el notepad++.

Muchas Gracias
Saludos!
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 7527
Ubicación: Mexico

MensajePublicado: 01/08/2013 6:39 pm
Título:

Hay dos problemas:

El primero se encuentra en la función. Cuando se reserva memoria mediante la función malloc se indica el numero de caracteres "N" y a continuación se accede a ellos utilizando los indices 0 .. N-1. La función con esa corrección y algunos cambios menores termina así:
Código:
char *subCadena(char *cadena, int comienzo, int longitud)
{
   char *nuevo = malloc(longitud + 1);
   int i;
   
   for(i = 0; i < longitud; i++)
      nuevo[i] = cadena[comienzo + i];
   nuevo[i] = '\0';
   
   return nuevo;
}

Pero la función continua con una deficiencia importante al no verificar si hay caracteres suficientes para generar la subcadena, por ejemplo si se quiere una subcadena de 900 caracteres a partir de la posición 100 cuando la cadena solo consiste (en un caso utópico) de 50.

El otro problema se debe a la cadena que deseas procesar y que mencionas tu editor de texto muestra con algunos caracteres como [NUL]. Si esos caracteres literalmente tienen ese valor te sera difícil procesarla ya que ese carácter se considera el terminador de una cadena (por ejemplo no puedes imprimirla con printf).

Un saludo
_________________
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com