Hola Mayen! mira, hay varios problemitas.
1ro) La función de biblioteca es alloc.h, no malloc.h
2do)"..printf("\nSe ha reservado espacio de memoria para %d caracteres", &n);.."
lo que estas haciendo ahí es que se muestre la dirección que se le asigno en
memoria a la variable n. Esa es la función que tiene el operador &. si le borras
el "&" te mostrará el numero que ingresaste.
3ro) Cuando haces referencia al puntero en las funciones printf y scanf deben ir sin el
operador indirección (*)
4to) Cuando vas a capturar la cadena de caracteres que ingresaste en scanf, debes
tipear: "..scanf("%[^\n]",var);.." eso significa que va a capturar todo lo que
escribas, menos el carácter de nueva línea(\n). y cuando especificas la variable
en donde guardarás la cadena, esta va sin el operador &. Este operador lo usas
únicamente para los tipo de datos enteros, flotantes y cuando solo guardas un solo
carácter.
Espero que me entiendas. je
Acá te pongo el código con las correcciones que te explique mas arriba.
#include <stdio.h>
#include <stdlib.h>
#include <alloc.h>
int main(){
int n;
char *puntcadena;
printf("Ingrese el numero de caracteres de la cadena:");
scanf("%d",&n);
getchar();
puntcadena=(char*)malloc(n*sizeof(char));
printf("\nSe ha reservado espacio de memoria para %d caracteres", n);
printf("\nIngrese la cadena:");
scanf("%[^\n]",puntcadena);
printf("El valor almacenado en la variable de la cadena es %s", puntcadena);
return 0;
}
Si habrás notado, hay un "getchar();" use getchar(); para liberar el buffer de memoria, porque en esa parte del programa cuando presiono la tecla enter, el buffer se queda con el carácter de nueva línea en memoria, y me salta las otras expresiones y no me deja hacer nada. si no comprendes bien lo que te explico, proba sacando getchar(); ejecuta y fíjate que pasa, luego volvele a poner getchar() y proba, a ver que pasa
Cualquier duda consultame, y trataremos de solucionar =)