elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
28 Mayo 2012, 23:25  


Tema destacado: Sigue las noticias más importantes de elhacker.net en ttwitter!

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  [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 874 veces)
newbie_hacker

Desconectado Desconectado

Mensajes: 23



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

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
char *cad = "";
int tecla; // necesito que sea int para comparar el valor de la tecla (ej: si apreta enter (0x13) termina el bucle)
while(true)
{
 tecla = getchar();
 cad[strlen(cad)] = (char)tecla;
 cad[strlen(cad)+1] = '\0';
...
}

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 por newbie_hacker » En línea
do-while


Desconectado Desconectado

Mensajes: 604


Cuando me afeito, recuerdo porque me dejo barba.


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

¡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

¡¡¡Feliz año nuevo!!!
newbie_hacker

Desconectado Desconectado

Mensajes: 23



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

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: 604


Cuando me afeito, recuerdo porque me dejo barba.


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

¡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
tu_tipo *un_puntero = NULL;
 
un_puntero = (tu_tipo*) malloc(sizeof(tu_tipo) * numero_de_componentes_que_quieras);
 

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

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 por do-while » En línea

¡¡¡Feliz año nuevo!!!
rir3760


Desconectado Desconectado

Mensajes: 382


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

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

The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
do-while


Desconectado Desconectado

Mensajes: 604


Cuando me afeito, recuerdo porque me dejo barba.


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

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

¡¡¡Feliz año nuevo!!!
rir3760


Desconectado Desconectado

Mensajes: 382


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

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

The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
do-while


Desconectado Desconectado

Mensajes: 604


Cuando me afeito, recuerdo porque me dejo barba.


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

¡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

¡¡¡Feliz año nuevo!!!
newbie_hacker

Desconectado Desconectado

Mensajes: 23



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

Solucionado, muchas gracias por la ayuda :)
En línea
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines