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... :-\
No sé si te he entendido bien... ¿Lo que quieres es saber cómo reservar memoria dinámica en variables de tipo char?
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
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.
eso!!!! gracias mil gracias!!! ahora voy a ponerme a utilizar eso para ver si me sale... pero millones de gracias!!!!
De nada. Si tienes más dudas, pregunta :D
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
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.
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
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.
muchas gracias de nuevo!!!!
eso tb me srive :D jeje pero no me he sabido explicar... o directamente cuando lea ese libro entendere.... jeje
lo que yo quiero hacer es... almacenar por ejemplo
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);
el resultado de 1 ciclo quiero almacenarlo en un array, el resultado del ciclo me tira como resultado un nombre ingresado por teclado: por ejemplo Marcos
el segundo da como resultado Miguel;
yo lo que queiro es guardar lo que me va dando el nuevo_proyecto_miembro... el un array y luego cuando utilize imprimir me tire todos los nomb re que guarde uno al lado del otro...
MArcos,Miguel,Manuel.
pero ahora leo el pfd del libro y me fijo bien.. kisas me lo acabas de explikar lo que pido pero no logro entender :D desde ya muchas gracias por las molestias
Lo siento, pero es que no entiendo muy bien lo que quieres hacer :huh:
EDITO: ¿Lo que quieres es usar estructuras? :D
eso que habia copiado
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);
}
esta dentro de una estructura... lo que yo quiero es saber que codigo tengo uq usar para poder utilizar los datos uqe me va dando &nuevo_proyectomiembro.miembro fuera de este bucle.. osea... que se me almacene en algo para luego ir agregandolo a donde lo necesito
Puedes crear una estructura con vector. Por ejemplo:
struct
{
char nombre[300];
char apellidos[600];
}datos[10];
Así, el primer nombre estará en
datos[0].nombre
el segundo, en
datos[1].nombre
etc.
Creo que te refieres a eso, ¿no?
Saludos.
haaaaaaaaaaaaaaa kreo que si!!!!!! ahora lo pruebo pero siiiii!!!! un millon de gracias!!!! y de nuevo disculpa las molestias pero haaaaaaaaaaaaaaaaaa muchas gracias!!!! por tomarte el tiempo de responder !! te lo re aprecio!! me voy a poner a trabajar ocn ese codigo!!! gracias de nuevo
De nada. Cualquier duda, pregunta :D