----- Original Message ----- > From: Allan Grant <pheonix@IQ-CORP.COM> > It works except for one thing, this guildlist file that it > generates always has some random symbols > around the 12th line in the file. For example: > {Aiel Leader} Leara, (Wise One, Taardad) > ¸{ý {Warder Leader} Lan, (Dai'Shan, Gaidin) I didn't really go over your code with a fine toothed comb. However, one thought that immediately popped into my head is that buf isn't large enough. You declare buf as buf[MAX_INPUT_LENGTH]. MAX_INPUT_LENGTH is #defined in structs.h to set the maximum input that would be accepted by the user, truncating any excess. Therefore, any function relying upon what the user inputs, such as do_say, will be safe from memory overruns. You, however, arbitrarily used the value of MAX_INPUT_LENGTH in this instance, even though it has no bearing on what anyone sitting at a terminal will type. Accordingly, you risk the chance of "the stars aligning" and getting a rather long player name coupled with a rather long guild name coupled with a rather long guild title, coupled with a rather long <insert everything else here>, which results in something larger than MAX_INPUT_LENGTH, hence your crashes and gobbledygook. My suggestion? Well, I have three. One, you can simply declare buf as buf[MAX_STRING_LENGTH], which is much larger than MAX_INPUT_LENGTH, if you're confident that the "worse case scenario" string length won't exceed that value. Alternatively, (and I would still do this even if you chose option one), you can add an overflow check in one of your loops that contatenate the various elements of the guild list to buf. Do a grep for OVERFLOW and see how other routines handled it. A third alternative (I wouldn't do it personally) is to set precision specifiers in a sprintf line that sets the length of each field, possibly truncating the rather long strings for display purposes. For instance: sprintf(blah_variable, "Name: %.10s, Guild: %.12s, Title: %.15s...[etc])... By the way, did you ever wonder why this line never showed up? sprintf(buf, "`$ Current Guild Leaders for All Guilds:\r\n"); Take a peek at the very next line. sprintf(buf, "%s-~-._.-~-._.-~-._.-~-._.-~-._.-~-._.-~-._.-~-._.-~-._.-~-._.-~-._.-~-._.- ~-._.-~-`7\r\n", buf); Good luck, --Rob. ---------------- ICQ: 14598527 +------------------------------------------------------------+ | Ensure that you have read the CircleMUD Mailing List FAQ: | | http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html | +------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 04/10/01 PDT