Ver Mensaje Individual
  #2 (permalink)  
Antiguo 21/11/2013, 13:17
vosk
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 12 años, 4 meses
Puntos: 83
Respuesta: Problema con array, char y int

Tienes que revisar los tipos de datos y lo que soportan. En la linea siguiente

Código C:
Ver original
  1. array[0]=*nombre;

estas asignando la direccion de memoria (un puntero de 4 bytes, todos los punteros ocupan 4 bytes) a un caracter de 1 byte, es decir que intentas meter 4 cosas donde solo caben 1.

Los arrays de texto no son tal como parecen, es decir que el array[10] no estas reservando memoria para 10 palabras, sino que estas reservando memoria para 1 sola palabra de 10 caracteres como maximo contando el \0 final.

Hay varias formas de solucionarlo. Sigo con tu ejemplo:

Código C:
Ver original
  1. char *nombre;
  2. nombre = strtok(frase, " ");
  3. nombre = strtok(NULL, " ");

Mientras esté activo el ambito de la variable 'frase', el puntero 'nombre' será valido (por cierto, te comento que strtok modifica la variable de entrada); eso significa que si quieres trabajar con ese puntero debes hacerlo dentro de ese ambito.

La otra forma es copiar el texto a otro texto; esto implica que el otro texto sea como minimo de la misma longitud+1 que el texto que le vas a copiar. Por ejemplo:

Código C:
Ver original
  1. char frase[] = "qwe asdfg";
  2. char *nombre;
  3.  
  4. nombre = strtok(frase, " ");
  5. nombre = strtok(NULL, " ");

Ahora en 'nombre' tienes el texto 'asdfg' que ocupa 5 bytes, pero ahora puedes ver la diferencia com lo que hacias antes:

Código C:
Ver original
  1. nombre //esto es el puntero al texto
  2. *nombre//esto es la direccion de memoria al puntero

Para copiar el texto del puntero a otro texto sin asignar la direccion de memoria debes disponer de una variable de (en este caso) 6 bytes (5 de los caracteres + 1 del \0):

Código C:
Ver original
  1. char copia[6];
  2. sprintf(copia, nombre);

Con esto tienes una copia de una sola palabra. Si quieres hacer una lista de palabras hay varias formas, la mas simple es usar una estructura que contenga un buffer de texto de longitud estandar e implementar una lista simple. La otra forma es mas compleja y consiste en crear una lista de texto separada por nulos.

Dependiendo de lo que quieras hacer puedes usar una u otra. De momento investiga un poco de que van las estructuras y como crear memoria dinamica para crear una lista. Todo esto suponiendo que estas en C, si estas en c++ tienes el objeto string y el contenedor vector, con lo que facilmente construyes un array de strings.

Saludos
vosk