Advertisement
AntonioVillanueva

Test experimentos array de string en HEAP

Jul 1st, 2016
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.93 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main(void)
  6. {
  7.  
  8.     char **string_array,**ref;
  9.     char *months[] = { "January", "February", "March", "April", "May",
  10.                "June", "July", "August", "September", "October",
  11.                "November", "December" };
  12.      char **puntero=months;
  13.                
  14.     string_array=malloc( sizeof (char*) *(sizeof (months) / sizeof (months[0]) ));//Reserva para 12 strings en la heap
  15.     ref=string_array;//Guarda la direccion de origen del puntero string_array recien reservado
  16.    
  17.     for (int i=0;i<12;i++){
  18.         printf ("%s \t\t  Reserva la linea y con %d chars \n",months[i] ,strlen(months[i]));
  19.         string_array[i]=malloc (strlen (months[i])*(sizeof (char)));//Reserva memoria para cada linea ...
  20.     }
  21.    
  22.     //printf (" Tamano array month= %d \n",(sizeof (months) / sizeof (months[0]) ));//Tamano array de strings
  23.    
  24.     //Muestra desde un puntero el array de strings que contiene los meses
  25.     for (int i=0 ; i < (sizeof (months) / sizeof (months[0]) ) ;i++){
  26.         printf ("%d , mes %s \n" ,strlen (*puntero),*puntero);
  27.         (puntero)++;   
  28.     }
  29.    
  30.     puntero=months;//Reset puntero, puntero aupunta al array de meses ...
  31.    
  32.     printf ("direccion puntero apuntando array de meses  =%p \n",puntero);
  33.  
  34.     //Copia a un array dinamico en heap el array de meses
  35.  
  36.     for (int i=0 ; i < (sizeof (months) / sizeof (months[0]) ) ;i++){
  37.            
  38.         printf ("Copiando numero   =%d , puntero1=%p ,puntero2=%p \n",i,puntero,string_array);
  39.        
  40.         memcpy (*string_array,*puntero,strlen  (*puntero));//Copia en la HEAP ......
  41.         (puntero)++;//Avanzo punteros
  42.         (string_array)++;
  43.    
  44.     }
  45.  
  46.     string_array=ref;//string_array vuelve a apuntar al inicio ;)
  47.  
  48. //  Muestra lo que ha copiado en la HEAP
  49.     for (int i=0;i<12;i++){
  50.         printf ("%s \n",string_array[i]);
  51.         free(string_array[i]);//Aprovech para Liberar lineas de strings ...
  52.     }
  53.  
  54.     free (string_array );//Libera todo el string_array reservado en heap
  55.    
  56.     return 0;
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement