| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
Xedrox
Registrado: 27 Dic 2012 Mensajes: 20
| Publicado: 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
| Publicado: 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 | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |