Dividir string para que ocupe las dos lineas del display

pues eso, mi display es de 16x2 y quiero que si el string ocupa 23 caracteres, que imprima los 16 primeros en la primera linea, y los restantes en la linea siguiente del display.

Ya sé que para cambiar de linea es Setcursosr(0,1) pero necesito que me digáis como partir el string en 16 caracteres y luego el resto a parte.

¿y qué tipo de string estás usando?

gepd:
¿y qué tipo de string estás usando?

Uso un char[100] y para mandarlo por RF lo paso a uint8_t. Este es el código que manda el mensaje:

char hola[100] = "Me llamo paco";

vw_send((uint8_t *)hola, strlen(hola));

Se me ocurre que lo hagas con un loop for.

char hola[100];
char inicio[50];
char final[50];
int j=0;

for(int i=0;i <= 100;i++){
  if(i <= 50){
    inicio[i] = hola[i];
  }else{
    final[j] = hola[i];
    j++;
  }
}

Esto podria andar aunque creo que tal vez haya que terminar tanto a como b con un ‘\0’
aclaro que el habla de un texto de 23 caracteres
en todo caso en lugar de tener fijo ese while(i<24) deberia reemplazarlo por un strlen(hola)
pero no debe superar 32 o sea la capacidad de las dos lineas del LCD 16x2

   int i = -1;
   char a[16], b[16];

    while (i<24) {
       i++;
       if(i <16) 
           a[i] = hola[i];
       else
           b[i-16] = hola[i];
     }

¿Qué tal esta otra opción? Está escrita al vuelo, aproximadamente:

uint8t *linea=hola;
vw_send(linea, 16); //para la primera línea
linea+=16; //Avanzamos puntero 16 posiciones
//aquí deberíamos mover cursor a línea 2
vw_send(linea); // Imprime hasta final

No me dejes con la duda, de donde sale vw_send(linea, 16); //para la primera línea

Ya está hecho, lo hice anoche así:

1- Cursor del LCD a 0,0
2- loop FOR que imprime de la posición cero hasta la 16 del string
3- salgo del FOR, cursor a 0,1.
4- Otro bucle FOR donde imprimo en la segunda linea ya de la posición 16 hasta la logintud del string (strlen(mensaje))

Ya descubrí a que librería pertenece vw_send(linea, 16); y es a virtualwire.
Ahora no entiendo? se supone que estamos con un LCD, como hace vw_send(linea, 16); para llegar al display? Ademas de tener que agregarla.

surbyte:
Ya descubrí a que librería pertenece vw_send(linea, 16); y es a virtualwire.
Ahora no entiendo? se supone que estamos con un LCD, como hace vw_send(linea, 16); para llegar al display? Ademas de tener que agregarla.

Almaceno lo que recibo en una variable y con un for voy imprimiendo carácter por carácter en el lcd

Le pregunto a Noter, ya vi que usaste tu solucion y si te funciona esta mas que bien.