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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [AYUDA] Cómo puedo concatenar un char a un puntero de chars?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [AYUDA] Cómo puedo concatenar un char a un puntero de chars?  (Leído 4,883 veces)
papita5

Desconectado Desconectado

Mensajes: 29



Ver Perfil
[AYUDA] Cómo puedo concatenar un char a un puntero de chars?
« en: 15 Octubre 2011, 05:10 am »

Wenas

Estoy haciendo un programa el cual recibe caracteres por la funcion getch() y los va concatenando a un puntero de chars. La idea seria algo asi:

Código
  1. char *cad = "";
  2. int tecla; // necesito que sea int para comparar el valor de la tecla (ej: si apreta enter (0x13) termina el bucle)
  3. while(true)
  4. {
  5.  tecla = getchar();
  6.  cad[strlen(cad)] = (char)tecla;
  7.  cad[strlen(cad)+1] = '\0';
  8. ...
  9. }

La cadena a la que voy concatenando los caracteres necesito que sea un puntero para no fijarle un tamaño.

Cómo podría hacerlo? ya busque por todos lados pero no encontre nada que me pueda servir :s

nota: ya probe strcat(cad, (char*)tecla) pero me tira error en tiempo de ejecucion: violacion de memoria.

Saludos


« Última modificación: 15 Octubre 2011, 05:14 am por newbie_hacker » En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: [AYUDA] Cómo puedo concatenar un char a un puntero de chars?
« Respuesta #1 en: 15 Octubre 2011, 05:19 am »

¡Buenas!

Investiga sobre las funciones malloc, realloc y free (se encuentran en stdio.h). Son las que estas buscando.

Si te surgen dudas sobre su manejo, ya lo sabes, consultanos.

¡Saludos!


En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
papita5

Desconectado Desconectado

Mensajes: 29



Ver Perfil
Re: [AYUDA] Cómo puedo concatenar un char a un puntero de chars?
« Respuesta #2 en: 15 Octubre 2011, 06:13 am »

Intente usarlas pero me tiran errores de memoria o me ponen basura en el puntero.
Se que se usan en conjunto y tienen un orden pero no se como van.
Me vendría bien un simple ejemplo de uso de estas funciones, en las guias las usan individualmente y no enseñan bien.
Saludos
En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: [AYUDA] Cómo puedo concatenar un char a un puntero de chars?
« Respuesta #3 en: 15 Octubre 2011, 07:37 am »

¡buenas!

Todas malloc y realloc devuelven un puntero a void (void*), por lo tanto tendras que aplicarles un cast al tipo que quieras:
Código
  1. tu_tipo *un_puntero = NULL;
  2.  
  3. un_puntero = (tu_tipo*) malloc(sizeof(tu_tipo) * numero_de_componentes_que_quieras);
  4.  

y lo mismo con realloc:
Código
  1. tu_tipo *un_puntero = NULL;
  2.  
  3. un_puntero = (tu_tipo*) realloc(un_puntero, sizeof(tu_tipo) * numero_de_componentes_que_quieras);
  4.  

Recuerda que es mas que reconmendable inicializar los punteros a NULL. Si un_puntero es NULL, realloc actua como malloc, y si el segundo parametro de realloc es cero, actuara como free. Si el puntero que recibe realloc no ha sido asignado de forma dinamica (malloc o calloc) obtendras errores por violaciones de acceso, lo mismo que pasara con free.

Despues de intentar asignar memoria, comprueba siempre si se ha podido realizar la operacion (si el puntero devuelto es NULL o no). Si utilizas realloc, utiliza un puntero auxiliar para comprobar si se ha podido reasignar la memoria. Si lo haces sobre el mismo puntero que contiene los datos y se le asigna un valor a NULL por no poder haber conseguido redimensionar el vector, habras cometido dos errores, perder los datos en alguna parte de la memoria y no poder liberarla, dejandola de forma permanente ocupando un espacio de memoria. Por esto ultimo, debes acordarte siempre de liberar la memoria que asignes de forma dinamica.

¡Saludos!
« Última modificación: 15 Octubre 2011, 07:39 am por do-while » En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: [AYUDA] Cómo puedo concatenar un char a un puntero de chars?
« Respuesta #4 en: 15 Octubre 2011, 19:05 pm »

Solo dos aclaraciones.

Los prototipos de las funciones malloc, calloc, realloc y free se encuentran en el encabezado <stdlib.h>.

Sobre la conversión explicita del "void *" que retornan esas funciones es obligatoria en C++ pero no se recomienda en C (ya que ella es automática).

Un saludo
En línea

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
do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: [AYUDA] Cómo puedo concatenar un char a un puntero de chars?
« Respuesta #5 en: 16 Octubre 2011, 20:13 pm »

Los prototipos de las funciones malloc, calloc, realloc y free se encuentran en el encabezado <stdlib.h>.

Cierto, no me habia dado cuenta de que le habia dicho que estaban en stdio  :P

Sobre la conversión explicita del "void *" que retornan esas funciones es obligatoria en C++ pero no se recomienda en C (ya que ella es automática)

Llevo mas de diez años programando en C, y nunca me ha dejado asignar directamente el puntero devuelto al asignar memoria dinamicamente. Siempre he utilizado MinGW (gcc, vamos), no se si otros compiladores permiten la asignacion directa o no, no los he usado y por lo tanto no lo puedo saber. Al reves de lo que dices, en C++ no hace falta realizar el cast, ya que el propio new devuelve un puntero correcto (o deberia hacerlo), del tipo de la clase (o vector de clases) que estes creando.

¡Saludos!
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: [AYUDA] Cómo puedo concatenar un char a un puntero de chars?
« Respuesta #6 en: 17 Octubre 2011, 02:16 am »

Llevo mas de diez años programando en C, y nunca me ha dejado asignar directamente el puntero devuelto al asignar memoria dinamicamente. Siempre he utilizado MinGW (gcc, vamos)
Es extraño, habría que revisar la linea de comando que utilizas. En el caso de gcc/cygwin para compilar en el modo mas estricto posible se llama a este con:
Código:
gcc -c -ansi -pedantic -Wall -O main.c
Y al utilizarlo asi una llamada a malloc como esta:
Código
  1. num = malloc(10 * sizeof *num);
Debe compilar sin problemas (para el caso según el estándar de C debe pasar correctamente con cualquier compilador).

Al reves de lo que dices, en C++ no hace falta realizar el cast, ya que el propio new devuelve un puntero correcto (o deberia hacerlo), del tipo de la clase (o vector de clases) que estes creando.
Me refería a las llamadas a malloc y compañía. En ese lenguaje la misma llamada:
Código
  1. num = malloc(10 * sizeof *num);
Debe generar un mensaje indicando que falta la conversión, la forma correcta es (si "num" es de tipo "int *"):
Código
  1. num = (int *) malloc(10 * sizeof *num);
Pero como bien comentas es mejor utilizar el par new/delete para reservas de memoria en C++ ya que así se garantiza (si aplica) la ejecución de los constructores/destructores.

Un saludo
En línea

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
do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: [AYUDA] Cómo puedo concatenar un char a un puntero de chars?
« Respuesta #7 en: 18 Octubre 2011, 03:22 am »

¡Buenas!

Me trago mis palabras sin aliñar.  :silbar:

Acabo de probar la asignacion sin cast del puntero devuelto por malloc (utilizando el compilador de C) y no ha protestado ni me ha insultado ni nada.  :xD

Por lo que se ve en algun momento he debido de tener algun trauma con la conversion, seguramente porque cuando empece no me fijaba si creaba ficheros .c o .cpp, y lo deberia de hacer en .cpp por lo que me saltaba g++ en lugar de gcc... asi que desde entonces tengo la costumbre de hacer siempre el cast.

Siento haber mareado la perdiz de esta forma.

¡Saludos!
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
papita5

Desconectado Desconectado

Mensajes: 29



Ver Perfil
Re: [AYUDA] Cómo puedo concatenar un char a un puntero de chars?
« Respuesta #8 en: 19 Octubre 2011, 20:39 pm »

Solucionado, muchas gracias por la ayuda :)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
martiz de char doble puntero
Programación C/C++
neo_from_cs_matrix 2 5,099 Último mensaje 15 Julio 2011, 00:05 am
por rir3760
duda doble puntero char a matriz de char
Programación C/C++
neo_from_cs_matrix 3 5,008 Último mensaje 5 Septiembre 2011, 03:53 am
por rir3760
Ayuda! Concatenar carácteres en C
Programación C/C++
ARCAME 1 1,404 Último mensaje 2 Diciembre 2012, 20:50 pm
por durasno
Ayuda convirtiendo puntero void a unsigned char y obtener su valor
Programación C/C++
harry_the_blogger 4 1,866 Último mensaje 5 Octubre 2014, 21:40 pm
por harry_the_blogger
Ayuda para guardar como char o como int
Programación C/C++
ciquee 5 1,318 Último mensaje 11 Marzo 2019, 18:24 pm
por ciquee
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines