Una posibilidad para realizarlo seria la siguiente:
Me imagino que la variable cadena es puntero a carácter, terminado en puntero nulo.
Creamos un vector para guardar cada una de las líneas (si sabemos el número de líneas finales, sino hay que crearlo dinámicamente)
char * lineas[numerolineas];
Vamos a utilizar el espacio de "cadena" para crear las líneas, sin tener que copiar bloques de memoria.
Evidentemente la primera línea comienza en el mismo lugar que cadena.
Creamos una variable para indicar el lugar actual dentro de la cadena, por ejemplo int actual.
Actual tendrá ahora el valor del ancho de la linea (24 en este caso).
Comenzamos el bucle hasta el valor de actual se salga del tamaño de la cadena.
Comprobamos si la posición actual es un espacio
Recorremos hasta encontrar el espacio y lo cambiamos por el fin de cadena '\0'
La siguiente linea comienza en la posición posterior a la actual
lineas[i]=&cadena[++actual];
Aumentamos el valor actual en el valor de ancho de linea
fin del bucle
y terminado.
Por ejemplo. Para el caso expuesto:
cadena = "hola amigos de c/c++ nesesito que esta frase se reparta en diferentes lineas\0";
quedaria de la forma
cadena = "hola amigos de c/c++\0nesesito que esta frase\0se reparta en diferentes\0lineas\0";
lineas[0]=&cadena[0];
lineas[1]=&cadena[21];
lineas[2]=&cadena[45];
lineas[3]=&cadena[70];
Cuatro lineas.
Hay esta la forma de hacerlo, solo hay que transformarlo en código.
Hasta luego.