elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [AYUDA] retornar un char * valido
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [AYUDA] retornar un char * valido  (Leído 2,140 veces)
bash

Desconectado Desconectado

Mensajes: 258



Ver Perfil
[AYUDA] retornar un char * valido
« en: 20 Abril 2016, 23:17 pm »

Un saludo a todos!!


necesito su consejo por favor , les cuento tengo una funcion que quita  algunos caracterers y luego retornar un puntero a char * que deberia ser valido pero siempre me da null o la aplicacion se cae. es mejor que les muestre... la hize de varias manera..

Código
  1.  
  2.  
  3. char *purge_char(char *buff, char ch)
  4. {
  5.    char *ret = NULL; //OJo
  6.    char *temporal = NULL;
  7.    int len = strlen(buff);
  8.    int index= 0;
  9.    int omitidos = 0;
  10.  
  11.     temporal = new char[len + 1];
  12.     while(index < len)
  13.    {
  14.         if(buff[index] != ch)
  15.           {
  16.                temporal[omitido] = buff[index];
  17.                omitido++;
  18.           }
  19.          index++;
  20.    }
  21.  
  22.   ret = new char[omitido + 1];
  23.   index = 0;
  24.   while(index < omitido)
  25.    {
  26.         ret[index] = temporal[index];
  27.    }
  28.    delete temporal;  
  29.    return ret;
  30. }
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42. char *purge_char(char *ret, char *buff, char ch)
  43. {
  44.    if(ret != NULL)
  45.     {
  46.        delete ret;
  47.        ret = NULL;
  48.      }  
  49.     char *temporal = NULL;
  50.    int len = strlen(buff);
  51.    int index= 0;
  52.    int omitidos = 0;
  53.  
  54.     temporal = new char[len + 1];
  55.     while(index < len)
  56.    {
  57.         if(buff[index] != ch)
  58.           {
  59.                temporal[omitido] = buff[index];
  60.                omitido++;
  61.           }
  62.          index++;
  63.    }
  64.  
  65.   ret = new char[omitido + 1];
  66.   index = 0;
  67.   while(index < omitido)
  68.    {
  69.         ret[index] = temporal[index];
  70.    }
  71.    delete temporal;  
  72.    return ret;
  73. }
  74.  
  75.  
  76.  

esas dos formas son las que yo uso y me dan error ambas , me gustaria que alguien me aconsejara please.


En línea

gracias por responder mis dudas
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: [AYUDA] retornar un char * valido
« Respuesta #1 en: 20 Abril 2016, 23:24 pm »

A ver si alguien con compilador C++ puede probar. Pero por lo que he visto así a simple vista:
Declaras la variable 'omitidos', nótese que es plural, y cuándo la usas escribes 'omitido', en singular. El compilador debe haberte avisado en los mensajes de error.



Más, por lo poco que se de C++, si declaras un array con new TIPO[], debes usar delete [] variable para borrarla.



Te falta incluir los caracteres de final de cadena '\0' al final de las cadenas que creas.


« Última modificación: 21 Abril 2016, 00:27 am por MAFUS » En línea

bash

Desconectado Desconectado

Mensajes: 258



Ver Perfil
Re: [AYUDA] retornar un char * valido
« Respuesta #2 en: 21 Abril 2016, 15:29 pm »

gracias por responder.

la s de omitidos es por la cantidad de caracteres el indentificador no importa en este caso y el programa compila y cierto debo usar [] para evitar memory leaks pero eso el compilador lo ha pasado por alto  y  en primera instancia no debe dar error.
En línea

gracias por responder mis dudas
class_OpenGL


Desconectado Desconectado

Mensajes: 437

Si usas Direct3D, no eres mi amigo :P


Ver Perfil
Re: [AYUDA] retornar un char * valido
« Respuesta #3 en: 21 Abril 2016, 16:03 pm »

No he revisado el código completo, pero me pregunto cómo salir de este bucle while si la condición siempre se cumple:

Código
  1. while(index < omitido) {
  2.    ret[index] = temporal[index];
  3. }
En línea

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: [AYUDA] retornar un char * valido
« Respuesta #4 en: 22 Abril 2016, 14:45 pm »

Observa las siguientes funciones, puede que te ayude con lo que buscas.
Código
  1. char* purge_char(const char *buff, char c) {
  2.    /* Genera un nuevo dato en el montón que debe ser liberado
  3.      * con la función free.
  4.      */
  5.    char *retval = NULL;
  6.    int buff_len;
  7.    int i;
  8.    int pos = 0;
  9.  
  10.    if(buff) {
  11.        buff_len = strlen(buff);
  12.        retval = malloc(buff_len + 1);
  13.        if(retval) {
  14.            for(i = 0; i < buff_len; ++i) {
  15.                if(buff[i] != c) {
  16.                    retval[pos] = buff[i];
  17.                    pos++;
  18.                }
  19.            }
  20.        }
  21.        retval[i] = '\0';
  22.    }
  23.    /* La línea de código que viene a continuación es por si
  24.      * prima el espacio a la velocidad. En caso contrario coméntala
  25.      * o bórrala.
  26.      */
  27.    retval = realloc(retval, strlen(retval) + 1);
  28.  
  29.    return retval;
  30. }

Código
  1. void purge_char2(char *buff, char c) {
  2.    /* Modifica el argumento buff para no gastar memoria. Por
  3.      * contrapartida el contenido anterior de buff queda destruido.
  4.      * El tamaño asignado a buff sigue teniendo el tamaño origina.
  5.      * La función no puede ser llamada usando una constante de cadena
  6.      * o va a fallar.
  7.      */
  8.    int i, j;
  9.  
  10.    if(buff) {
  11.        for(i = 0, j = 0; i < strlen(buff); ++i) {
  12.            if(buff[i] != c) {
  13.                buff[j] = buff[i];
  14.                j++;
  15.            }
  16.        }
  17.        buff[j] = '\0';
  18.    }
  19. }
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda en C. Unir char a char[] SOLUCIONADO
Programación C/C++
NeoB 5 5,245 Último mensaje 10 Abril 2012, 23:07 pm
por NeoB
(Ayuda) Error al modificar el valor de un char en una cadena const char *
Programación C/C++
Seyro97 4 7,516 Último mensaje 2 Julio 2015, 15:17 pm
por Seyro97
Ayuda por favor! Con c, unsigned char y array de char !
Programación C/C++
Yurasamai 1 2,850 Último mensaje 24 Noviembre 2015, 09:14 am
por avesudra
Ayuda con retornar una cadena
Programación C/C++
banhart24 1 1,441 Último mensaje 16 Abril 2016, 21:51 pm
por HardForo
Retornar punteros char? ¿Si o si memoria dinamica? « 1 2 »
Programación C/C++
Xargam 11 5,055 Último mensaje 27 Junio 2018, 00:26 am
por ThunderCls
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines