Well, Netscape crashed on me when I was almost done replying before (mutters), hopefully I'll be able to finish it this time... Torgny Bjers wrote: <snip> > When it comes to about 240-250 characters in the string (STR I presume) Actually it's str. I know you capitalized it for emphasis, but C is case sensative, and capitalizing variable names off hand is a VERY bad habit to get into. > it > overflows or something and doesn't print anything else into the string, can > any one help me out here? > Well, I'll look through and tell you what I can see... > > ---------------------------SNIP--------------------------------- > void class_spells_index(int chclass, char *str) ^^^^^^^^^ You're using a passed buffer to hold the output of ths function. The problem could easily be outside of the function and have to do with the way the buffer is declared/allocated. > { > int i, spellnum, num; > int n_spells, n_skills; Hrmmm, the use of buf1 in this function could (possibly) be the problem if buf1 is already in use by the calling function. As a rule I only use the global buffers in ACMDs and a few other places where I'm sure I won't be stepping on nother functions usage of them or vice-versa. To find out if this is the problem and fix it in the same step simply declare buf1 as a local which will isolate it from other functions as follows... char buf1[MAX_STRING_LENGTH]; > *str = '\0'; > sprinttype(chclass, pc_class_types, buf1); > sprintf(str,"&CSpells & Skills available for &G%ss&C.\r\n", buf1); > strcat(str, > "&w------------------------------------------------------------------------- > ----\r\n"); > sprintf(str,"%s&WLevel Spell/Skill Name&w\r\n", str); ^^ ^^^^^ This is bad (you can search the archives to find out why it has been addressed several times), use... strcat(str, "&WLevel Spell/Skill Name&w\r\n"); > > n_spells = 0; > n_skills = 0; > for (i = 1; i <= MAX_MORT_LEVEL; i++) { > sprintf(str,"%s&Y%2d&w ", str, i); ^^ ^^^^^ Again, this is bad, use... sprintf(str + strlen(str), "&Y%2d&w ", i); > num = 0; > for (spellnum = 1; spellnum < TOP_SPELLS; spellnum++) { ^ ^ This will loop from 1 to TOP_SPELLS-1. If you want to loop from 1 to TOP_SPELLS use <= instead of <, if you want to loop from 0 to TOP_SPELLS-1 (which is usually the case if you're using spellnum to index an array) use spellnum = 0. > if (SINFO.min_level[chclass] == i) { > if (num >= 3) strcat(str, "\r\n "); > if (spellnum >= 1 && spellnum <= MAX_SPELLS) { ^^^^^^^^^^^^^^^^^ This check is redundant, since spellnum starts at 1 and counts up it will always be >=1 (see the above comment for changing the values that spellnum loops through). > strcpy(buf1, "&m"); > n_spells++; > } else if (spellnum > MAX_SPELLS && spellnum < ^^^^^^^^^^ > START_NON_PLAYER_SPELLS) { ^^^^^^^^^^^^^^^^^^^^^^^ So far I have seen TOP_SPELLS, MAX_SPELLS, and START_NON_PLAYER_SPELLS. Double check these #defines to make ceartain they are correct. > strcpy(buf1, "&c"); > n_skills++; > } else > strcpy(buf1, "&R"); > sprintf(str, "%s%s%-22s", str, buf1, spells[spellnum]); ^^ ^^^^^ Again this is bad, use > sprintf(str + strlen(str), "%s%-22s", buf1, spells[spellnum]); > num++; > } > } > strcat(str,"\r\n"); > > } > strcat(str, "\r\n"); > sprintf(buf1, "&mSpells: &Y%d&w, &cSkills: &Y%d&w, &WTotal: &Y%d&w\r\n", ^^^^ > n_spells, n_skills, n_spells+n_skills); > strcat(str, buf1); ^^^^^^^^^^^^^^^^^^ It is a waste to copy all of this stuff twice, just use... sprintf(str + strlen(str), "&mSpells: &Y%d&w, &cSkills: &Y%d&w, &WTotal: &Y%d&w\r\n", n_spells, n_skills, n_spells+n_skills); > return; > } > ---------------------------SNIP--------------------------------- Regards, Peter +------------------------------------------------------------+ | 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/11/01 PDT