You assume that all bytes are available at the moment that Serial.available() indicates that possibly only one is / two are available.
Serial communication is slow. One byte takes 1 millisecond. You type in serial monitor e.g. two characters. The first one is received, read and stored at location 0 in the array. The next one is still being transmitted from the PC to the Arduino.
Next you write hunderd bytes in the array that is only 20 bytes long; you overwrite memory that doe not belong to the array; this might e.g. be the integer i (if it’s stored in memory after the array) and in that case corrupts your counter.
Now loop is finished, runs 100 times or so and only then sees the second character that is transmitted.
This will be more in line with what is needed; this assumes a fixed message from the PC of 19 characters.
if (Serial.available() > 0)
message[i] = Serial.read();
if (i == 20)
mesaage = '\0';
i = 0;
Once you understand the above, you can take it a step up and read Serial Input Basics - updated
Second problem is that you increment i in the for statement, then you increment it again in the for loop. So that means i increases by 2 with every fime through the for loop.
OOPS, missed that one.