??? 02/25/08 15:50 Modified: 02/25/08 15:56 Read: times |
#151422 - I think not Responding to: ???'s previous message |
Charles,
Thanks for taking the time to code the example. Unfortunately, it's wrong. The biggest problem is with this line: ++phrases2[line_no];That statement tries to increment one of the entries in the phrases2[] table. If the table is in code memory as we have been discussing, that simply won't work. And even if the table was in RAM where you could modify it, doing so would corrupt the table so that the program would fail the second time through the main loop. What you need instead is to pass a pointer to each phrase as the argument to put_phrase(). That way, put_phrase() gets its own private pointer to each phrase, which it can manipulate as needed without corrupting the table. The following code shows what I mean. (It's modified for simulation on the PC so that I could actually run it to make sure it works.) Note that it also shows Michael's nifty technique for automatically #defining MAX_LINES so you don't have to worry about changing it every time you change the phrases[] table. -- Russ #include <stdio.h> unsigned char *phrases[] = { // Array of pointers to strings "Short", // to display "Medium", "Very long" }; // End phrases[] table #define MAX_LINES (sizeof(phrases) / sizeof(char *)) /* ///////////////////////////////////////////////////////////////////////// */ void put_phrase ( // Displays the string pointed unsigned char *phrasePointer // to by 'phrasePointer' ) { while (*phrasePointer != 0) { // For each character in string putchar(*phrasePointer++); // Display the character } // End 'for each character' putchar('\n'); // Add newline for testing on PC } // End put_phrase() /* ///////////////////////////////////////////////////////////////////////// */ void main( void ) { // Exercises put_phrase() int i; // Generic loop counter unsigned char phrase; // Index into phrases[] table for (i=0; i<5; i++) { // Do 5 times for testing on PC for (phrase = 0; // For each phrase in the table phrase < MAX_LINES; phrase++) { put_phrase(phrases[phrase]); // Display the current phrase } // End 'for each phrase' } // End 'do 5 times' } // End main() |