Си: как и где хранить большие тексты

Есть программа, которая выдает пользователю рандомный текст. В роли хранения этих больших текстов я выбрал массив, например:

char *en_arr[10];

Затем начиная с 0 идет заполнение:

  en_arr[0] = "Now indulgence dissimilar for his thoroughly has terminated. Agreement\n\
offending commanded my an. Change wholly say why eldest period. Are\n\
projection put celebrated particular unreserved joy unsatiable its. In then\n\
dare good am rose bred or. On am in nearer square wanted. Silent sir say\n\
...";

  en_arr[1] = L"Warmly little before cousin sussex entire men set. Blessing it ladyship\n\
on sensible judgment settling outweigh. ...";

Затем идет srand() + rand() и функция возвращает текст под рандомным индексом массива, получается что вернулся рандомный текст. Мне кажется это решение немного некрасивое, ибо файл texts.c полон только этими длинными текстами. Наверное логичнее будет хранить эти большие тексты в обычном текстовом файле и релизовать чтение этого файла в буфер программы. Но я немного не понимаю как это сделать. Если я использую системный вызов read() то получаю всё содержимое файла, что логично, а хотелось бы конкретный текст вытащить

Например текстовый файл состоит:

Huge text one. Huge text one. Huge text one.
Huge text one. Huge text one. Huge text one.

Huge text two. Huge text two. Huge text two.
Huge text two. Huge text two. Huge text two.

Huge text three. ...

Между текстами пустая строка для разделения текстов. Программа сгенерировала число 1. Как прочитать только первый текст в буфер? Или например сгенерировалось число 3, значит читаем 3 текст в буфер, не затрагивая при этом другие тексты. Или есть какое-то другое более просто решение?

Помню что в Питоне как-то раз приходилось работать с yml файлами и там можно было бы сделать таким образом:

1:
  text
2:
  text

Затем генерировать рандомное число, обращаться к этому файлу, и по индексу текста получать этот текст. А в Си видимо придется придумывать что-то иначе ...


Ответы (1 шт):

Автор решения: Антон

Можно ещё вот так делать!

/* main.c */

#include <stdio.h>

int main(void)
{
    char *text[] =
    {
        #include "text.h"
    };

    printf("%s", text[2]);
}
/* text.h */

"Now indulgence dissimilar for his thoroughly has terminated. Agreement\n\
offending commanded my an. Change wholly say why eldest period. Are\n\
projection put celebrated particular unreserved joy unsatiable its. In then\n\
dare good am rose bred or. On am in nearer square wanted. Silent sir say\n\
...",

"Warmly little before cousin sussex entire men set. Blessing it ladyship\n",

"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi ac tempor risus, ut \n\
feugiat lectus. Maecenas hendrerit metus et velit molestie, pretium mollis libero\n\
accumsan. Praesent pretium lorem ut nisi rutrum rhoncus. Cras ipsum libero, convallis vel\n\
lorem luctus, tempor bibendum turpis. Duis mauris metus, scelerisque sit amet lorem non,\n\
venenatis placerat nisi. Praesent sit amet tellus non augue euismod ornare. Etiam id ex\n\
ultricies, malesuada elit at, pharetra quam. Vivamus efficitur, ex eget blandit aliquet, lorem\n\
orci vulputate dolor, vel iaculis sem lorem ac lorem. In a malesuada ligula. Aliquam quam mi, feugiat\n\
vel mattis at, rhoncus ut massa. Curabitur aliquam rutrum nulla ac bibendum. Donec vitae nunc \n\
rutrum, dapibus diam sed, pellentesque lectus. Etiam id risus suscipit, euismod purus a, dignissim enim.\n\
Nullam pharetra pellentesque dignissim. Phasellus nibh est, vestibulum vitae fermentum quis, lobortis \n\
sollicitudin dui. Vestibulum a libero lacinia metus blandit porta vel et nunc.\n" 
→ Ссылка