Message-ID: <39CE1EF7.12DAA29F@user.rose.com> From: April X-Mailer: Mozilla 4.7 [en]C-CCK-MCD {TLC;RETAIL} (Win95; U) X-Accept-Language: en MIME-Version: 1.0 Newsgroups: comp.os.msdos.djgpp Subject: Re: GPF caused by string functions... References: <8qi4hm$ism$1 AT nnrp1 DOT deja DOT com> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Lines: 42 Date: Sun, 24 Sep 2000 10:34:15 -0500 NNTP-Posting-Host: 205.189.215.3 X-Trace: client 969805643 205.189.215.3 (Sun, 24 Sep 2000 10:27:23 EDT) NNTP-Posting-Date: Sun, 24 Sep 2000 10:27:23 EDT To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com raynee AT my-deja DOT com wrote: > I am trying to get some string functions to work as part of the > interface for my program. I am using ScreenPutString to write to the > screen and my code appears to work when I call my centrestring() > function once it works okay. A second call, however, causes a General > Protection fault no matter how I specify my parameters. The code that I > am using is: It isn't really the second call that is failing - comment out either and the crash occurs. Did you compile with -g and use symify [symify app.exe]. The crash is on the line buf[width] = 0; but it actually misleading. I believe the problem is that the buf[] is not set to '\0', so strcat(buf,str) cannot find the end of the string. i = strlen(str); // determine length j = (width - i) / 2; // determine starting point memset(buf,' ',--j); // clear the start of the buffer strcat(buf,str); // append the string to the buffer memset(spacer,' ',(width-i-j)); // clear the end of the space buffer strcat(buf,spacer); // append spaces buf[width] = 0; // terminate string buffer putstring(buf,fg,bg,col,row); // call putstring() If your program uses any sort of stdio, you may want to re-write the above to use sprintf(). The "*.*s" format specifier should let you get the above. The is not tested, but the concept is good: i = strlen(str); // determine length j = (width - i) / 2; // determine starting point sprintf( buf, "%*s%*.*s", j, "", -(width-j), width-j, str); good luck