user642: I wrote a program using PROGMEM for massive string arrays. One of the arrays worked, but when I added the second one, the serial output only puts out "th".
Pastebin Code: http://pastebin.com/9U7QZQKn

user84: I see one major flaw in your code, related to index usage on arrays.
Arrays in C and C++ are using a 0-based index, meaning that, for an array containing N elements:

the first element is accessible with index 0
the last element is accessible with index (N-1)

However, your code uses TrueRandom.random(1,numPokemon+1); which means you'll get an index between 1 and numPokemon (included), if you get the numPokemon value for your index, then you'll get garbage as it will try access some other part of memory.
Maybe that is not the only problem in your code, but this one is a major bug.

user136: Your declaration of char buffers is done like so:
char* move1 = "N/A";

This will only allocate 3 characters with an additional one for null termination i.e. not long enough to hold the name.
You need to do:
char buffer[16];

Where the length is long enough to hold your string.

642: <p>I wrote a program using PROGMEM for massive string arrays. One of the arrays worked, but when I added the second one, the serial output only puts out "th".</p>

<p>Pastebin Code: <a href="http://pastebin.com/9U7QZQKn" rel="nofollow">http://pastebin.com/9U7QZQKn</a></p>
 84: <p>I see one major flaw in your code, related to index usage on arrays.</p>

<p>Arrays in C and C++ are using a <strong>0-based index</strong>, meaning that, for an array containing <code>N</code> elements:</p>

<ul>
<li>the first element is accessible with index <code>0</code></li>
<li>the last element is accessible with index <code>(N-1)</code></li>
</ul>

<p>However, your code uses <code>TrueRandom.random(1,numPokemon+1);</code> which means you'll get an index between <code>1</code> and <code>numPokemon</code> (included), if you get the <code>numPokemon</code> value for your index, then you'll get garbage as it will try access some other part of memory.</p>

<p>Maybe that is not the only problem in your code, but this one is a major bug.</p>
 136: <p>Your declaration of char buffers is done like so:</p>

<pre><code>char* move1 = "N/A";
</code></pre>

<p>This will only allocate 3 characters with an additional one for null termination i.e. not long enough to hold the name.</p>

<p>You need to do:</p>

<pre><code>char buffer[16];
</code></pre>

<p>Where the length is long enough to hold your string.</p>
