Muchas gracias por la aclaración :)<br><br>Me quedo con fgets() ya que lo que necesito tambien es almacenar el \n final. Muchas gracias<br><br><div class="gmail_quote">El 16 de febrero de 2009 2:15, Steven Davidson <span dir="ltr"><<a href="mailto:srd4121@njit.edu">srd4121@njit.edu</a>></span> escribió:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Hola Javier,<div class="Ih2E3d"><br>
<br>
Javier Cancio del Busto wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Buenas,<br>
<br>
Estoy haciendo un programa, en el cual tengo una función que debe<br>
leer una línea de consola, de, como máximo, 200 caracteres. El caso<br>
es que declaro un char *linea; y hago gets(linea); y al compilar (me<br>
compila y ejecuta bien el código) me da un warning que no entiendo<br>
por qué me lo da, y es el siguiente:<br>
<br>
</blockquote>
<br></div>
Si estás pasando el puntero 'linea' directamente a 'gets()' y te ha funcionado correctamente, entonces has tenido muchísima suerte. En realidad, estás cometiendo un error si has escrito esto:<br>
<br>
char *linea;<br>
<br>
gets( linea );<br>
<br>
'linea' no es nada más que un puntero, que inicialmente apuntará a una dirección de memoria arbitraria. Posteriormente, asignas datos a partir de dirección de memoria. Esto puede provocar un error en tiempo de ejecución o incluso peor: no mostrar ningún mensaje.<br>

<br>
Deberías crear memoria dinámicamente o declarar un array (estático). Esto es,<br>
<br>
char szCadena[200];<br>
char *linea = (char*) malloc( 200 );<div class="Ih2E3d"><br>
<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
[sepho@arch pr_shell_alumno]$ make<br>
gcc ush.c profe_32.a analizador.o redireccion.o ejecucion.o -o ush<br>
/tmp/ccUPiwYV.o: In function `leerLinea':<br>
ush.c:(.text+0x15f): warning: the `gets' function is dangerous and should not be used.<br>
strip ush<br>
<br>
</blockquote>
<br></div>
El mensaje es un aviso. No deberías usar 'gets()' porque no tiene en cuenta la cantidad máxima del array. Esto implica que puede sobrepasar las limitaciones y sobreescribir memoria que pertenezca a otras variables o incluso a otros programas.<br>

<br>
Puedes usar 'fgets()', aunque te guardará el carácter de fin-de-línea, '\n' en la cadena. Por ejemplo,<br>
<br>
fgets( szCadena, 200, stdin );<br>
<br>
También puedes usar 'scanf()'. Esto sería,<br>
<br>
scanf( "%199s", szCadena );<br>
<br>
<br>
Espero haber aclarado las dudas.<br><font color="#888888">
<br>
Steven</font><div><div></div><div class="Wj3C7c"><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>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>=====================<br>   Javier Cancio del Busto<br>=====================<br>