<div dir="ltr">Hola Gabriel,<div class="gmail_extra"><br><div class="gmail_quote">2013/1/26 Gabriel Casarsa <span dir="ltr"><<a href="mailto:gabriel_casarsa@yahoo.com.ar" target="_blank">gabriel_casarsa@yahoo.com.ar</a>></span><br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr>
<td valign="top" style="font:inherit"><p class=""><span style="font-size:10pt;font-family:Arial">Hola
Steven, muchas gracias por contestar.</span><u></u><u></u></p>

<p class=""><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> </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.</span></p></td></tr></tbody></table></blockquote><div><br></div><div style>La función 'fscanf()' ya realiza esta tarea de leer y de guardar hasta encontrarse con un espacio blanco o con el fin-de-fichero (EOF).</div>
<div style><br></div><div style>Como dije antes, la expresión es gramaticalmente correcta, pero no tiene sentido. Es como hacer esto:<br><br>5 != 0;</div><div style><br></div><div style>Es correcto, pero no hace nada.</div>
<div><br></div><div>[CORTE]<br></div><div style> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><table cellspacing="0" cellpadding="0" border="0">
<tbody><tr><td valign="top" style="font:inherit"><p class=""></p>

<p class=""><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.<u></u><u></u></span></p>

<p class=""><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.</span></p></td></tr></tbody></table></blockquote><div><br></div><div style>Entonces sugiero usar 'strncpy()' para asegurar que la copia sea de 1 carácter - más el nulo al final. Por ejemplo,</div>
<div style><br></div><div style>strncpy( alarma, cadena, 2 );</div><div style><br></div><div style>Sin embargo, como dices que quieres copiar 2 o menos caracteres, entonces necesitas crear una cadena de 3 caracteres. Recuerda que las cadenas autoterminadas siempre guardan el carácter nulo al final, por lo que hay que dejar "hueco" para ello.</div>
<div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><table cellspacing="0" cellpadding="0" border="0">
<tbody><tr><td valign="top" style="font:inherit"><p class=""><span style="font-size:10pt;font-family:Arial"><u></u><u></u></span></p>

<p class=""><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.</span></p></td></tr></tbody></table></blockquote><div><br></div><div style>Entonces debes crear un array de 62 cadenas:<br><br><span style="font-family:arial,sans-serif;font-size:12.727272033691406px">char delitos[62][20] = { "" };</span><br>
</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><table cellspacing="0" cellpadding="0" border="0">
<tbody><tr><td valign="top" style="font:inherit"><p class=""><span style="font-size:10pt;font-family:Arial"><u></u><u></u></span></p>

<p class=""><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.<u></u><u></u></span></p>

<p class=""><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].</span></p></td></tr></tbody></table></blockquote><div><br></div><div style>Me temo que necesitas más práctica con el uso de punteros. Un puntero no es más que una dirección de memoria, la cual es la ubicación de un valor o posiblemente el primero de una serie (de un array). Por ejemplo,</div>
<div style><br></div><div style>int num = 10;</div><div style>int *ptr = &num;</div><div style><br></div><div style>'ptr' apunta al valor de 'num'. Cualquier cambio a 'num', implica un cambio de valor si usáremos el puntero, 'ptr'. El puntero es como una asociación o ligadura a una variable o al valor en una variable.</div>
<div style><br></div><div style>Lo que estás haciendo es algo así:<br><div><br></div><div>int num = 10;</div><div>int *lista[3] = { 0 };</div><div><br></div><div style>for( int i=0; i<3; i++ )</div><div style>{<br>  num++;</div>
<div style>  lista[i] = &num;</div><div style>}</div><div><br></div><div style>Cada puntero en 'lista' apuntará a la misma variable, a la misma dirección de memoria, y por tanto al mismo valor que se guarde ahí. Visualmente, hacemos esto:<br>
<br><div>lista[0] -------+</div><div>                     |</div><div><div style>                    V</div></div>lista[1] ----> num</div></div><div><div>                     ^<br></div><div></div><div>                     |<br>
</div><div><div>lista[2] -------+</div></div></div><div><br></div><div style>Lo mismo ocurre en tu programa, estás apuntando a la misma ubicación de la cadena. Puedes cambiar el contenido que se guarde en esa memoria - y en sucesivas ubicaciones - pero sigues apuntando al mismo lugar.</div>
<div><br></div><div style>Lo que necesitas es guardar cada cadena en su propia memoria. Por eso sugiero usar un array de cadenas de caracteres. Si quieres usar punteros, entonces tienes que crear memoria dinámicamente, con 'malloc()', si usas C; y liberarla con 'free()'.</div>
<div><br></div><div><br></div><div style>Espero que esto aclare las dudas.</div><div><br></div></div>Steven</div><div class="gmail_extra"><br></div></div>