<div>Para agregar a lo que ya explicó David, la razón por la que no compila <br></div><div><br></div><div> 1: char str[20];<br> 2: str = ctime(&now);<br></div><div><br></div><div>es que el tipo de str es equivalente a <br>

</div><div><br></div><div>char * const str;</div><div><br></div><div>es decir, un puntero constante a un char.</div><div>En consecuencia, si el puntero es constante, no puede ser modificado.</div><div><br></div><div>Así con la alternativa que pusiste, terminas dejando 20 bytes cada vez que llamas a ctime. Y además al hacer el free, estas intentando liberar una zona de memoria que no se reservó con malloc[1], con lo cual no sabés que problemas inesperados te pueden ocurrir.</div>

<div><br></div><div>La forma de hacerlo sería:</div><div><br></div><div>1: char *str;<br> 2: str = ctime(&now);</div><div><br></div><div><br></div><div>Saludos</div><div>[1] <a href="http://www.bsdlover.cn/study/UnixTree/V5/usr/source/s3/ctime.c.html">http://www.bsdlover.cn/study/UnixTree/V5/usr/source/s3/ctime.c.html</a></div>

<div><br></div><div><br></div><div class="gmail_quote"><br>

<blockquote class="gmail_quote" style="border-left:1px solid rgb(204, 204, 204);margin:0pt 0pt 0pt 0.8ex;padding-left:1ex">Hola Lista,<br>
<br>
  Bueno, esto es una duda que siempre he tenido, el hecho de utilizar<br>
  una función que devuelve un char* y en su lugar lo que estoy<br>
  poniendo es una variable de arreglo. Pongo un ejemplo para que esto<br>
  se vea mejor. Vamos a suponer que tenemos lo siguiente:<br>
<br>
  1: char str[20];<br>
  2: str = ctime(&now);<br>
<br>
  Aquí en la línea 2 es donde se presenta el error que tiene por<br>
  título el correo, y lo cual me queda bien claro y es que no puede<br>
  asignarle el puntero al arreglo de 20 caracters.<br>
<br>
  Una alternativa que he utilizado en ocasiones es la siguiente:<br>
<br>
  1: char *str = (char *)malloc(sizeof(char) * 20);<br>
  2: str = ctime(&now);<br>
  3: ...<br>
  4: free(str);<br>
<br>
  y la cual veo conveniente; pero ustedes se imaginan el hecho de que<br>
  esto esté dentro de un ciclo, que esté constantemente en cada<br>
  iteración reservando y liberando la memoria, me imagino también que<br>
  pensarían y bueno, si siempre es esa cantidad porque no se reserva y<br>
  libera fuera del ciclo, lo cual está bien. Pero al respecto sigo<br>
  reflexionando, tengo entendido, y que me corrijan si me equivoco,<br>
  porque no conozco mucho al respecto, en el primer ejemplo cuando se<br>
  compila ya se ha reservado ese espacio de memoria el cual siempre ya<br>
  estará utilizable, lo cual no sucede así en el segundo ejemplo y que<br>
  se irá reservando y utilizando durante la ejecución, tema que demora<br>
  la ejecución de la aplicación.<br>
<br>
  Espero, tener comentarios al respecto y bueno, tal vez otra<br>
  alternativa de solución.<br>
<br>
--<br>
Salu2,<br>
 Gilbert<br>
<br>
<br>
_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net" target="_blank">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br>
</blockquote><font color="#888888"><br><br clear="all"></font></div><br>