<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;"><p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">Hola
Steven, muchas gracias por contestar.</span><o:p></o:p></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">Cuando
hago  </span><span style="font-size: 13.5pt; font-family: Arial;">fscanf
(ptrdel, "%s", cadena) != EOF;<span class="apple-converted-space"> </span></span><span style="font-size: 10pt; font-family: Arial;">es para leer hasta
encontrar un espacio. No se si es la forma de hacerlo, pero anduvo bien je.<o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">Yo
tengo almacenado en el archivo algo así:<o:p></o:p></span></p>

<p class="MsoNormal"><i><span style="font-size: 10pt; font-family: Arial;">25/01/2013 16:21:39<o:p></o:p></span></i></p>

<p class="MsoNormal"><i><span style="font-size: 10pt; font-family: Arial;">NO X Falsificacion Extorsion Toma_de_Rehen Falsificacion Robo
Falsificacion ,<o:p></o:p></span></i></p>

<p class="MsoNormal"><i><span style="font-size: 10pt; font-family: Arial;">NT + ,<o:p></o:p></span></i></p>

<p class="MsoNormal"><i><span style="font-size: 10pt; font-family: Arial;">NE X Robo Incendio Usurpacion Robo Asesinato Asesinato ,<o:p></o:p></span></i></p>

<p class="MsoNormal"><i><span style="font-size: 10pt; font-family: Arial;">OE X Usurpacion Falsificacion Falsificacion Usurpacion Incendio ,<o:p></o:p></span></i></p>

<p class="MsoNormal"><i><span style="font-size: 10pt; font-family: Arial;">CE ! ,<o:p></o:p></span></i></p>

<p class="MsoNormal"><i><span style="font-size: 10pt; font-family: Arial;">ES X Robo Asesinato Extorsion Extorsion Asesinato ,<o:p></o:p></span></i></p>

<p class="MsoNormal"><i><span style="font-size: 10pt; font-family: Arial;">SO X Robo Asesinato ,<o:p></o:p></span></i></p>

<p class="MsoNormal"><i><span style="font-size: 10pt; font-family: Arial;">SR X Incendio Robo Asesinato Extorsion ,<o:p></o:p></span></i></p>

<p class="MsoNormal"><i><span style="font-size: 10pt; font-family: Arial;">SE ! Extorsion ,<o:p></o:p></span></i></p>

<p class="MsoNormal"><i><span style="font-size: 10pt; font-family: Arial;">-<o:p></o:p></span></i></p>

<p class="MsoNormal"><i><span style="font-size: 10pt; font-family: Arial;">25/01/2013 16:21:40<o:p></o:p></span></i></p>

<p class="MsoNormal"><i><span style="font-size: 10pt; font-family: Arial;">NO X Extorsion Extorsion Robo Extorsion Usurpacion Falsificacion ,<o:p></o:p></span></i></p>

<p class="MsoNormal"><i><span style="font-size: 10pt; font-family: Arial;">NT X Falsificacion Robo Falsificacion Usurpacion Incendio
Toma_de_Rehen ,<o:p></o:p></span></i></p>

<p class="MsoNormal"><i><span style="font-size: 10pt; font-family: Arial;">NE ! Extorsion Extorsion Extorsion Falsificacion ,<o:p></o:p></span></i></p>

<p class="MsoNormal"><i><span style="font-size: 10pt; font-family: Arial;">OE ! ,<o:p></o:p></span></i></p>

<p class="MsoNormal"><i><span style="font-size: 10pt; font-family: Arial;">CE X Asesinato Robo Extorsion ,<o:p></o:p></span></i></p>

<p class="MsoNormal"><i><span style="font-size: 10pt; font-family: Arial;">ES X Falsificacion Extorsion Falsificacion Robo ,<o:p></o:p></span></i></p>

<p class="MsoNormal"><i><span style="font-size: 10pt; font-family: Arial;">SO X Asesinato Falsificacion ,<o:p></o:p></span></i></p>

<p class="MsoNormal"><i><span style="font-size: 10pt; font-family: Arial;">SR X Incendio Usurpacion Asesinato Asesinato Falsificacion ,<o:p></o:p></span></i></p>

<p class="MsoNormal"><i><span style="font-size: 10pt; font-family: Arial;">SE ! Incendio Toma_de_Rehen Usurpacion Usurpacion ,<o:p></o:p></span></i></p>

<p class="MsoNormal"><i><span style="font-size: 10pt; font-family: Arial;">-<o:p></o:p></span></i></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"> </span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">Lo
que quiero hacer es leer las palabras. La primera es la fecha, luego la hora y después,
como son 9 zonas hasta iniciar una nueva actualizacion, hago un for en el que
leo la zona que, luego un carácter de estado de alarma y luego, hasta encontrar
una “,”, leo los distintos delitos.<br>
La z me olvide de sacarla, me di cuenta que con j alcanzaba.<o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">El
tema de la longitud de cadena es para los delitos, pero cuando lee zona o
alarma nunca va a tener mas de 2 o 1 carácter.<o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">El
“d” nunca va a poder superar la cantidad de 62, que es la maxima cantidad de
delitos por actualizacion.<o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">Me
funciona bien hasta donde probe, pero me parece que me estoy haciendo mucho
problema con el tema de punteros entonces.<o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">No
entiendo porque zonas[0] = NO; y cuando va a j = 1, ademas de actualizar el
zonas[1] actualiza el zonas[0].<o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-size: 13.5pt; font-family: Arial;"><br>
</span><span style="font-size: 10pt; font-family: Arial;">--- El<span class="apple-converted-space"> </span><b>sáb 26-ene-13, Davidson, Steven<span class="apple-converted-space"> </span><i><srd4121@njit.edu></i></b><span class="apple-converted-space"> </span>escribió:</span><span style="font-size: 13.5pt; font-family: Arial;"><o:p></o:p></span></p>

<p class="MsoNormal" style="margin-bottom:12.0pt"><span style="font-size: 10pt; font-family: Arial;"><br>
De: Davidson, Steven <srd4121@njit.edu><br>
Asunto: Re: [C con Clase] Duda para almacenar datos leidos desde un archivo<br>
Para: "Lista de correo sobre C y C++"
<cconclase@listas.conclase.net><br>
Fecha: sábado, 26 de enero de 2013, 19:52<o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">Hola
Gabriel,<o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"> </span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">2013/1/26
Gabriel Casarsa<span class="apple-converted-space"> </span><<a href="http://ar.mc1203.mail.yahoo.com/mc/compose?to=gabriel_casarsa@yahoo.com.ar" target="_blank" rel="nofollow" ymailto="mailto:gabriel_casarsa@yahoo.com.ar">gabriel_casarsa@yahoo.com.ar</a>><o:p></o:p></span></p>

<table class="MsoNormalTable" border="0" cellspacing="0" cellpadding="0">
 <tbody><tr>
  <td valign="top" style="padding:0cm 0cm 0cm 0cm">
  <p class="MsoNormal">Hola, tengo un problema al que no encuentro solucion. Yo
  tengo creado un archivo de acceso aleatorio.<o:p></o:p></p>
  <p style="margin:0cm;margin-bottom:.0001pt">No vale la pena ahondar demasiado
  en lo que hace el programa en si.<br>
  Leo bien todos los datos, pero a la hora de almacenarlos, tengo un error.<br>
  Apenas iniciado el for, guardo en una variable char una palabra. Esta palabra
  le guardo en la posicion j=0 de una variable char*.<br>
  Cuando guardo la siguiente iteración, me la guarda tanto en la posicion 0
  como en la j=1.<br>
  O sea, al final de las 9 iteraciones, me queda el vector char* zonas[9] con 9
  datos idénticos.<o:p></o:p></p>
  </td>
 </tr>
</tbody></table>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"> </span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">El
problema tiene que ver con que estás guardando punteros y no los datos en sí;
es decir, guardas las direcciones de memoria de la información. Lo explico más
abajo en el código fuente.<o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"> </span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">Veámoslo.<o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"> </span></p>

<table class="MsoNormalTable" border="0" cellspacing="0" cellpadding="0">
 <tbody><tr>
  <td valign="top" style="padding:0cm 0cm 0cm 0cm">
  <p style="margin:0cm;margin-bottom:.0001pt"><span style="font-family:Arial">#ifndef
  _HISTORIAL_H_</span><o:p></o:p></p>
  <p class="MsoNormal">#define _HISTORIAL_H_<br>
  #include <stdio.h><br>
  #include <string.h><br>
  #include <stdlib.h><br>
  <br>
  void historial(){<br>
   FILE *ptrdel;<br>
  char archivodelitos[] = "delitos.txt";<br>
  char cadena[20];<br>
  char fecha[20];<br>
  char hora[20];<br>
  char alarma[2];<br>
   char *alarmas[9] = {0};<br>
  char zona[2];<br>
   char *zonas[9] = {0};<br>
  char delito[20];<o:p></o:p></p>
  <p style="margin:0cm;margin-bottom:.0001pt">char *delitos[54] = {0};<o:p></o:p></p>
  <p style="margin:0cm;margin-bottom:.0001pt">int i = 0; int d = 0; int j = 0;<o:p></o:p></p>
  <p class="MsoNormal">ptrdel = fopen(archivodelitos, "r");<br>
  <br>
  fseek(ptrdel,0,SEEK_SET);<br>
  <br>
  fscanf (ptrdel, "%s", cadena) != EOF;<o:p></o:p></p>
  </td>
 </tr>
</tbody></table>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"> </span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">Esto
es gramaticalmente correcto, pero no tiene sentido. Me imagino que quieres
comprobar si no has llegado al final del fichero. Para esto, usa 'feof()', pero
necesitas usar 'if' para tomar decisiones en la lógica del programa. Por
ejemplo,<o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"> </span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">fscanf(
ptrdel, "%s", cadena );<o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">if(
!feof(ptrdel) )<o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">{<o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"> 
...<o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">}<o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"> </span></p>

<table class="MsoNormalTable" border="0" cellspacing="0" cellpadding="0">
 <tbody><tr>
  <td valign="top" style="padding:0cm 0cm 0cm 0cm">
  <p class="MsoNormal">strcpy(fecha,cadena);<br>
  fscanf (ptrdel, "%s", cadena) != EOF;<br>
  strcpy(hora,cadena);<br>
  <br>
  for(j=0;j<9;j++,z++){<o:p></o:p></p>
  </td>
 </tr>
</tbody></table>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"> </span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">No
usas 'z', ni tampoco la declaraste previamente. Supongo que se te olvidó
eliminar del código que nos enviaste.<o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"> </span></p>

<table class="MsoNormalTable" border="0" cellspacing="0" cellpadding="0">
 <tbody><tr>
  <td valign="top" style="padding:0cm 0cm 0cm 0cm">
  <p class="MsoNormal">   fscanf (ptrdel, "%s", cadena) !=
  EOF;<br>
     strcpy(zona,cadena);<o:p></o:p></p>
  </td>
 </tr>
</tbody></table>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"> </span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">Esto
es peligroso, porque 'zona' es un array de 2 'char', mientras 'cadena' es un
array de 20 'char'. Esto significa que posiblemente se copien más caracteres en
'zona' que pueda almacenar, por lo que rebasaría la memoria reservada para
'zona', peligrando la estabilidad del programa.<o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"> </span></p>

<table class="MsoNormalTable" border="0" cellspacing="0" cellpadding="0">
 <tbody><tr>
  <td valign="top" style="padding:0cm 0cm 0cm 0cm">
  <p class="MsoNormal">   zonas[j] = zona;<br>
     fscanf (ptrdel, "%s", cadena) != EOF;<br>
     strcpy(alarma,cadena);<o:p></o:p></p>
  </td>
 </tr>
</tbody></table>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"> </span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">Aquí
tienes el mismo problema de antes: 'alarma' es de 2 'char', mientras que
'cadena' puede contener más, y por tanto la copia puede resultar peligrosa para
el programa.<o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"> </span></p>

<table class="MsoNormalTable" border="0" cellspacing="0" cellpadding="0">
 <tbody><tr>
  <td valign="top" style="padding:0cm 0cm 0cm 0cm">
  <p class="MsoNormal">   alarmas[j] = alarma;<br>
     while(strcmp(cadena,",")!=0){<br>
         if (strcmp(cadena,",")!=0){<br>
         fscanf (ptrdel, "%s", cadena) != EOF;<br>
         strcpy(delito,cadena);<br>
         delitos[d] = delito;<br>
         d++;<o:p></o:p></p>
  </td>
 </tr>
</tbody></table>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"> </span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">Cuidado
con usar 'd' como índice sin limitar su valor en este bucle, ya que puede
rebasar el intervalo válido de índices. Deberías comprobar el valor de 'd' en
la condición del bucle 'while'.<o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"> </span></p>

<table class="MsoNormalTable" border="0" cellspacing="0" cellpadding="0">
 <tbody><tr>
  <td valign="top" style="padding:0cm 0cm 0cm 0cm">
  <p class="MsoNormal">       <span lang="EN-GB">}<br>
     }<br>
  }<br>
  <br>
  printf("%s\n",fecha);<br>
  printf("%s\n",hora);<br>
  <br>
  for(i=0;i<9;i++){<br>
     printf("%d %s %c\n", i, zonas[i], alarmas[i]);<o:p></o:p></span></p>
  </td>
 </tr>
</tbody></table>

<p class="MsoNormal"><span lang="EN-GB" style="font-size: 10pt; font-family: Arial;"> </span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">Hay
un error con el último parámetro, ya que en la cadena de formato, quieres
representar el puntero, 'alarmas[i]', como un solo carácter. O bien accedes a
un carácter,<br>
<br>
printf( "%d %s %c\n", i, zonas[i], alarmas[i][0] );  //
Mostramos el primer carácter de una "alarma"<br>
<br>
O bien quieres mostrar una cadena,<o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"> </span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">printf(
"%d %s %s\n", i, zonas[i], alarmas[i] );  // Mostramos la cadena
apuntada por 'alarmas[i]'<o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"> </span></p>

<table class="MsoNormalTable" border="0" cellspacing="0" cellpadding="0">
 <tbody><tr>
  <td valign="top" style="padding:0cm 0cm 0cm 0cm">
  <p class="MsoNormal">}<br>
  fclose(ptrdel);<br>
  }<br>
  <br>
  #endif<o:p></o:p></p>
  </td>
 </tr>
</tbody></table>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"> </span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"> </span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">El
problema es que usas punteros a cadenas, pero sólo apuntas a la misma cadena;
por ejemplo, escribes,<o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"> </span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">zonas[j]
= zona;<o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"> </span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">El
contenido de 'zona' puede cambiar en cada iteración, por lo que cada puntero en
'zonas' apuntará a la misma cadena y por tanto al mismo contenido.<o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"> </span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">Viendo
el código, creo que te conviene usar arrays y no punteros. Si quieres mantenter
una lista de 9 cadenas de caracteres, entonces haz eso mismo:<br>
<br>
char alarmas[9][2] = { "" };  // 9 arrays de 2 'char' cada uno<o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">char
zonas[9][2] = { "" };<o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">char
delitos[54][20] = { "" };<o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"> </span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">Puedes
eliminar los otros arrays: 'zona', 'alarma', 'delito', y 'cadena', porque podemos
usar los otros arrays directamente. Por ejemplo,<o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"> </span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">fscanf(
ptrdel, "%s", fecha );<o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">fscanf(
ptrdel, "%s", hora );<o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">...<o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">fscanf(
ptrdel, "%s", zonas[j] );<o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">fscanf(
ptrdel, "%s", alarmas[j] );<o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">...<o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">fscanf(
ptrdel, "%s", delitos[d] );<o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"> </span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">Además,
creo que esto es más legible.<o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"> </span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"> </span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">Espero
que esto te ayude.<o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"> </span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">Steven<o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"> </span></p>

<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"> <o:p></o:p></span></p>

<p class="MsoNormal"><o:p> </o:p></p></td></tr></table>