Note that there are some explanatory texts on larger screens.

plurals
  1. POstrcpy crash with char *[] (ARGV Structure)
    text
    copied!<p>I have a problem with the c function 'strcpy' that I have not been able to figure out.</p> <p>it involves copying to a char *[] like Argv (but not actually Argv). I can copy out of the structure but not in. But only if I initially declare the entire Argv Structure in a single go.</p> <p>I assume that a <code>char *[]</code> is and array of <code>char*</code>.</p> <p>Here is a simple demo program of the issue:</p> <pre><code>#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; char FN[]="BBBB"; char *TL[]={ "a0 ", "a1 ", "a2 ", "a3 ", "a4 ", "a5 "}; char BN[]="c1 "; char N0[]="N0 "; char N1[]="N1 "; char N2[]="N2 "; char N3[]="N3 "; char N4[]="N4 "; char N5[]="N5 "; char* TD[6]; int main ( int argc, char *argv[] ) { // FN is a pointer to an array of chars // BN is the same //TL is an array of pointers (that each point to an array of chars) //TL[1] is thus a pointer to an array of chars //TL is the same structure as Argv //TD is the same structure as Argv (but built up from parts) // but is spread out across the globals and the main func. // thus less easy to read and understand then TL. //TL[i], TD[i], and BN are initially allocated significantly larger than FN // to remove the worry of overruns. //copy "a1 \0" into the space held by "c1 " strcpy(BN,TL[1]); //works //copy "BBBB\0" into the space held by "c1 " strcpy(BN,FN); //works TD[0]=N0; TD[1]=N1; TD[2]=N2; TD[3]=N3; TD[4]=N4; TD[5]=N5; //copy "BBBB\0" into the space held by "a1 " strcpy(TD[1],FN); //works //copy "BBBB\0" into the space held by "a1 " //strcpy(TL[1],FN); //dies } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload