Text only displaying on top half of 2x16

So I am attempting to go through this instructable: http://www.instructables.com/id/Wiring-up-the-LCD-and-the-LED/?ALLSTEPS
And when I run the code the display only shows text on the top half and chops off words. When it does show the next screen it has skipped words as well.
I want to know how to modify the code to display text on the second line and not chop off words. Any help?

// This code is for the Arduino RSS feed project, by Fritter
// Read the comment lines to figure out how it works

int startstring = 0;     // recognition of beginning of new string
int charcount = 0;     // keeps track of total chars on screen
       
#include  <LiquidCrystal.h>  // import the LiquidCrystal Library
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
         Serial.begin(9600);     // opens serial port, sets data rate to 9600 bps
         lcd.begin(16,2);            // Initialize the LCD size 16x2. Change if using a larger LCD
         lcd.setCursor(0,0);     // Set cursor position to top left corner
         pinMode(13, OUTPUT);
}

void loop() {
        char incomingByte = 0;   // for incoming serial data
       
         if (Serial.available() > 0) {        // Check for incoming Serial Data
                 digitalWrite(13, HIGH);
                 incomingByte = Serial.read();
                 if ((incomingByte == '~') && (startstring == 1)){            // Check for the closing '~' to end the printing of serial data      
                   startstring = 0;                                                                  // Set the printing to off
                   delay(5000);                                                                     // Wait 5 seconds
                   lcd.clear();                                                                         // Wipe the screen
                   charcount = 0;                                                                   // reset the character count to 0
                   lcd.setCursor(0,0);                                                          // reset the cursor to 0,0
                 }
                 if (startstring == 1){                                                             // check if the string has begun if first '~' has been read
                   if (charcount <= 30){                                                        // check if charcount is under or equal to 30
                     lcd.print(incomingByte);                                                // Print the current byte in the serial
                     charcount = charcount++;                                             // Increment the charcount by 1 yes I know it's awkward
                     }
                   }
                   if (charcount == 31){                                                         // if the charcount is equal to 31 aka the screen is full
                     delay(500);
                     lcd.clear();                                                                        // clear the screen
                     lcd.setCursor(0,0);                                                         // set cursor to 0,0
                     lcd.print(incomingByte);                                                // continue printing data
                     charcount = 1;                                                                 // set charcount back to 1
                   }
                  
                 if (incomingByte == '~'){                                                    // Check if byte is marker ~ to start the printing
                  
                   startstring = 1;                                                                  // start printing
                 }
         }
                 digitalWrite(13, LOW);
                 delay(10);                                                                            // 10ms delay for stability
             }

Sorry, made an edit.

First, you need an array to hold the incoming chars. Then you can use strlen() to find the length of the char array, and with the aid of a little division, you can tell the code where you want the message to go.

Keep in mind the library being used, you need to change a few things to get it to work for you.

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

char data[30] = "abcdefghijklmnopqrstuvwxyz";

LiquidCrystal_I2C lcd(0x20,16,2);  // set the LCD address to 0x20 for a 16 chars and 2 line display

void setup()
{
  lcd.init();// initialize the lcd  
  lcd.backlight();
  lcd.print("Hello, world!"); // Print a message to the LCD.
  
  for(uint8_t MSG=0; MSG < strlen(data); MSG++)
  {
    lcd.setCursor( (MSG%16), (MSG/16) ); //MSG%16 sets the column, and MSG/16 sets the Row
    lcd.print(data[MSG]);
  } 
}

void loop()
{
}