2015-12-04 3 views
-1

У меня проблема: Мне нужно прочитать текст (из stdin), и я знаю, сколько строк текст имеет (N), это будет примерно так: sentence1 (введите) предложение2 (введите) предложение3 (введите) \ 0 Я не знаю, сколько символов в каждом предложении (число будет отличаться). Пожалуйста, помогитемассив строк, динамически распределенных в C

ответ

1

Вы читаете строки неизвестной длины, но знаете, что есть N строк.

char *lines[N]; // the array of pointers to your lines 
int i = 0; 

читать каждую строку вы можете объявить большой массив символов, если у вас есть некоторое представление о том, как долго может быть самое длинное предложение:

char *buffer; 
buffer = calloc(1000, sizeof(char)); // An arbitrary size. I made it up. 

Затем используйте fgets() для чтения из файла в буфер. fgets() будет читать следующую новую строку или EOF, в зависимости от того, что наступит раньше.

Затем поместите адрес вашего malloc'd пространства в массиве указателей:

lines[i] = buffer; 

Недостатком этого является много неиспользуемого пространства в предложениях. Один из способов вокруг него было бы выделить еще один массив символов после чтения строки из файла:

char *sentence = calloc(strlen(buffer)+1, sizeof(char)); 
strcpy(sentence, buffer, strlen(buffer)); 

Затем поместите адрес предложения в массиве указателей:

lines[i] = sentence; 

это все падает если какое-либо предложение длиннее 1000 символов.

Смежные вопросы