Ayuda asignacion de memoria dinámica palabras en c

(1/5) > >>

newfag:
buenas, tengo un problemilla, quiero hacer un programa que acepte un numero indeterminado de palabras y las imprima por pantalla(esto último solo para ver si funciona), había pensado algo así pero no va, una ayudita por favor

Código:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

main()
{
int n,i;
char *vect;                       
printf("Nº palabras: ");
scanf("%d" ,&n);

vect=(char *)calloc(sizeof(char),n);
for(i=0;i<n;i++)
  {
  printf("palabra: ");
  scanf("%s" ,vect[i]);
  }
for(i=0;i<n;i++)
printf("%s\n", vect[i]);
}



Eternal Idol:
Ahi estas reservando memoria para una sola palabra de n caracteres  ;)

newfag:
Cita de: Eternal Idol en 18 Mayo 2010, 16:38 pm

Ahi estas reservando memoria para una sola palabra de n caracteres  ;)

ala es verdad!!!
vale, me pongo a ello, muchas gracias

EI: juntando mensajes.

arreglado, por si alguien le sirve de ayuda aqui lo dejo
Código:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

main()
{
int n,i;
char **vect;
printf("Nº palabras: ");
scanf("%d" ,&n);

vect=(char **)calloc(sizeof(char*),n);
for(i=0;i<n;i++)
vect[i]=(char*)malloc(sizeof(char)*50);

for(i=0;i<n;i++)
  {
  printf("palabra: ");
  scanf("%s" ,vect[i]);
  }
  for(i=0;i<n;i++)
  printf("%s\n", vect[i]);
}

Gallu:
No te parece que estás "mal gastando " memoria ?  que sucede cuando la palabra ingresada no es de 50 caracteres , en todo caso 50 caracteres ya me suena a frase , quedaría mejor si reservas la memoria necesaria para el tamaño especifico de cada palabra ... :-\

newfag:
Cita de: Didacso en 18 Mayo 2010, 17:17 pm

No te parece que estás "mal gastando " memoria ?  que sucede cuando la palabra ingresada no es de 50 caracteres , en todo caso 50 caracteres ya me suena a frase , quedaría mejor si reservas la memoria necesaria para el tamaño especifico de cada palabra ... :-\



hmm tienes razón, quedaría algo así, pero no se me ocurre otra manera de hacerlo que poner una variable auxiliar de 20 caracteres :S
EDIT: al usar la funcion strlen lo se incluye el terminador de la cadena, por eso pongo strlen(aux)+1

Código:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

main()
{
int n,i;
char **vect,aux[20];
printf("Nº palabras: ");
scanf("%d" ,&n);

vect=(char **)calloc(sizeof(char*),n);
for(i=0;i<n;i++)
  {
  printf("palabra: ");
  scanf("%s" ,aux);
  vect[i]=(char*)malloc(sizeof(char)*(strlen(aux)+1));
  strcpy(vect[i],aux);
  }

for(i=0;i<n;i++)
printf("%s\n", vect[i]);
}

Navegación

[0] Índice de Mensajes

[#] Página Siguiente