Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/08/2010, 20:42
Mosazu
 
Fecha de Ingreso: abril-2010
Mensajes: 31
Antigüedad: 14 años
Puntos: 1
escribir en la primera posiciòn de un arreglo de char

Tengo un pequeño problema con el tipo char*

Para comenzar, estoy creando una cadena de char.

Código C:
Ver original
  1. char * cadena=(char *)malloc(tamano);
//Donde tamano es la cantidad de bytes que el usuario pide.

ahora, tengo que escribir fragmentos de texto en esa cadena, en diferentes posiciones.

Pongamos este caso, el usuario pide 100 como tamano. Creo la memoria total con un tamaño de 100.

El usuario pide que escriba 20 veces la letra a, escribo desde la posición 0 a la 19 del arreglo, la letra a.

El usuario pide que escriba 15 veces la letra d, escribo desde la posición 20 a la 34 del arreglo, la letra d.

El usuario pide que escriba 10 veces la letra j, escribo desde la posición 35 a la 44 del arreglo, la letra j.

El usuario pide que imprima la memoria. Imprimo:
aaaaaaaaaaaaaaaaaaaadddddddddddddddjjjjjjjjjj

El usuario libera la letra a, y tengo y los primeros 20 espacios libres.

El usuario pide que escriba la letra t 12 veces, escribo desde la posición 0 hasta la 11 con la letra t.

El usuario pide que muestre la memoria. Imprimo:

ttttttttttt.

El problema está cuando quiero escribir en la primera posición del arreglo de "memoria", porque cuando escribo en la primera posición, entonces pierdo la referencia a todos los elementos siguientes de arreglo. Es decir, me está creando un arreglo nuevo.

¿Alguna sugerencia para que esto no suceda?


Dejo aquí el código:

Código C:
Ver original
  1. /*escribe el texto <nombre>, desde la posicios <pos>, hasta la
  2. posición <pos + mem> en la memoria simulada. */
  3. int escribir(char *nombre, int pos, int mem)
  4. {
  5.     int i = 0; 
  6.     for(i; i<mem;)
  7.     {
  8.         int j=0;
  9.         for(j; j<strlen(nombre);j++)
  10.         {
  11.             if(i>=mem)break;   
  12.             strcpy(((char *)&memoria[pos+i]), ((char *)&nombre[j]));
  13.             i++;
  14.         }
  15.        
  16.        
  17.     }
  18. }