<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Generator" CONTENT="MS Exchange Server version 5.5.2448.0">
<TITLE>RE: [LCP]Very Small Doubt...</TITLE>
</HEAD>
<BODY>

<P><FONT SIZE=2>&gt; int n;</FONT>
<BR><FONT SIZE=2>&gt; char *str, *str1;</FONT>
<BR><FONT SIZE=2>&gt; scanf(&quot;%s&quot;, str);</FONT>
<BR><FONT SIZE=2>&gt; scanf(&quot;%s&quot;, str1);</FONT>
<BR><FONT SIZE=2>&gt; scanf(&quot;%d&quot;,&amp;n);</FONT>
</P>

<P><FONT SIZE=2>int n</FONT>
<BR><FONT SIZE=2>places spce for an int on the stack, and you tell scanf</FONT>
<BR><FONT SIZE=2>to place the int in it. Fine.</FONT>
</P>

<P><FONT SIZE=2>char *str</FONT>
<BR><FONT SIZE=2>places spaces for a pointer to character on the stack.</FONT>
<BR><FONT SIZE=2>However, you don't tell scanf to place its data in it</FONT>
<BR><FONT SIZE=2>(you lack the &amp;), but where it's pointing to. And you</FONT>
<BR><FONT SIZE=2>haven't made it point anywhere, so it's pointing ...</FONT>
<BR><FONT SIZE=2>somewhere unknown.</FONT>
</P>

<P><FONT SIZE=2>- char *str,*str1;</FONT>
<BR><FONT SIZE=2>+ char str[256],str1[256];</FONT>
</P>

<P><FONT SIZE=2>or</FONT>
</P>

<P><FONT SIZE=2>- char *str,*str1;</FONT>
<BR><FONT SIZE=2>+ char *str=malloc(256),*str1=malloc(256);</FONT>
</P>
<BR>

<P><FONT SIZE=2>However, remember than with scanf, you can't (AFAIK) size</FONT>
<BR><FONT SIZE=2>the allocated memory to what is read, thus, stack smashing</FONT>
<BR><FONT SIZE=2>possibility in the first patch, and arena corruption in</FONT>
<BR><FONT SIZE=2>the second. A safer way is to read little bits by little</FONT>
<BR><FONT SIZE=2>bits (of known size) and allocate accordingly.</FONT>
</P>

<P><FONT SIZE=2>--</FONT>
<BR><FONT SIZE=2>Vincent Penquerc'h </FONT>
</P>

</BODY>
</HTML>