Ayuda con el uso de malloc en char (C)

Iniciado por m4rkk0s, 2 Julio 2012, 20:48 PM

0 Miembros y 1 Visitante están viendo este tema.

m4rkk0s

buenas estoy tratando de entender el uso de malloc

yo quiero almacenar una variable tipo char y almacenarla, y que la variable quede utilizable para otro dato y asi, luego cuando finalize.. quiero poder acceder y obtener todos los datos que se generaron...

encuentro ejemplos pero con malloc int...

espero poder explicarme bien...  :-\

DickGumshoe

No sé si te he entendido bien... ¿Lo que quieres es saber cómo reservar memoria dinámica en variables de tipo char?

m4rkk0s

sisi osea... guardar los datos que voy obteniendo... para luego utilizarlos en un fprintf....

osea como es la sintaxis para los char ese es el problema... no se la sintaxis..

void * ptr = NULL;
   
    ptr = (char*)malloc(sizeof(1000));
    ptr = &nuevo_proyecto.miembro;


por ejemplo yo hago esto... pero no se ni lo que hago no entiendo y esto me da como resultado 1... y no es lo que quiero yo quiero que en ptr.. se almacene todo loq ue va saliendo de nuevo_proyecto.miembro

DickGumshoe

Imagínate que tenemos las variables:

char *cadena1, *cadena2;

Le queremos reservar un solo espacio:

cadena1 = (char*) malloc (sizeof(char));

Ahora, vamos a reservarle 1000 espacios:

cadena2 = (char*) malloc (1000 * (sizeof(char));

¿Era eso?

Saludos.

m4rkk0s

eso!!!! gracias mil gracias!!! ahora voy a ponerme a utilizar eso para ver si me sale... pero millones de gracias!!!!


DickGumshoe

De nada. Si tienes más dudas, pregunta  :D

m4rkk0s

HOLA DE NUEVO

OTRA CONSULTITA.. .Y PARA MOSTARLO? EN EL FPRINTF =?

SOLO TENGO QUE PONER  EN ESE CASO   CADENA2? O TENGO QUE PONER CADENA2(1000); O ALGO POR EL ESTILO?

o deberia de usar un fread para leer primero lo que puse en la cadena y luego imprimirlo?


desde ya muchas rgacias y espero que entiendas lo que pongo! :D

DickGumshoe

Una vez hayas reservado la memoria dinámica y le hayas dado unos valores a la variable, se la trata como a una cadena de caracteres normales.

Es decir, siguiendo el prototipo de fprintf:

int fprintf(FILE *stream, const char *formato, ...);

Debes poner solo "cadena2", sin el subíndice.

Saludos, y espero haber entendido la duda.

m4rkk0s

primero que nada muchas gracias por tu ayuda!! muy copado!!! todavia no lo digiero completamente otod lo que me comentaste pero trankiloq eu lo voy a poner en practica
segundo me dijeron que hiciera un array
while (b!=0){
    printf("\n Ingrese un personal de la peticion: ");
    fflush(stdin);
    scanf ("%s",&nuevo_proyecto.miembro);

    printf("\n Ingrese el rol del personal: ");
    fflush(stdin);
    scanf ("%s",&nuevo_proyecto.miembrorol);

    printf (" quiere continuar agregando personal de %s\n  \nPresione 1 para agregar 0 para finalizar\n",&nuevo_proyecto.miembrorol);

    scanf("%d",&b);


osea un array con los valores que va generando el nuevo_proyecto_miembro... mmm como funciona el array char???? mi programacion en basica.. osea conozco array pero no como usar un array para almacenar char... si tenes alguna pagina de donde aprender... desde ya muchas gracias... si no conoces no importa seguire igualmente agradecido por la gran ayuda q eu me diste.. me ayudo a entender mucho..!!! gracias desde ya

DickGumshoe

#9
Si con "almacenar char" te refieres a pedir los datos que entrarán en la cadena de caracteres, lo que has hecho está bien.

No obstante, no recomiendo pedir una cadena de caracteres con scanf, mejor que uses gets o fgets, ya que scanf coge solo hasta el primer espacio que le introduzcas.

Cada carácter que le vayas metiendo, uses la función que uses para introducir los datos (gets o fgets, scanf, como ya dije, mejor que no), se meterá en un espacio del array. Por ejemplo:

char cadena[20];
printf("Introduzca la cadena");
gets(cadena);

Salida por consola:

--> Introduzca la cadena
------> hola !

por lo tanto, en cadena quedaría así:

cadena[0] = 'h'
cadena[1] = 'o'
cadena[2] = 'l'
cadena[3] = 'a'
cadena[4] = ' ';
cadena[5] = '!'
cadena[6] = '\0'


cadena[6] tiene un '\0' porque así es más fácil de manipular la cadena (cuando profundices en usar funciones para manipular cadenas te darás cuenta). La función gets le añade el carácter automáticamente.

Aquí tienes un manual, tanto en formato html como en pdf: http://www.nachocabanes.com/c/

A mí me sirvió bastante ese.

¿Era eso?

Saludos.