Как прочитать текстовый файл в массив в простом C? - PullRequest
0 голосов
/ 04 января 2012

Я пытаюсь прочитать весь текстовый файл в строковый массив на C. Вот что у меня есть:

#include <stdio.h>
#include <time.h>

int main(){
   FILE *fp;
   long lSize;
   char *buffer;
   size_t result;
   int array_val;

   char random_word[100];

   //open fle
   fp = fopen("dictionary.txt", "rb");

   //get file size
   fseek (fp, 0, SEEK_END);
   lSize = ftell(fp);
   rewind(fp);

   //allocate RAM for file
   buffer = (char *) malloc (sizeof(char)*lSize);

   //put file in buffer
   result = fread (buffer, 1, lSize, fp);

   srand(time(NULL));
   array_val = rand()%lSize + 1;

   random_word = result[array_val];
   return 0;
}

Однако, когда я строю, он не работает (дух) иЯ получаю эти ошибки:

subscripted value is neither array nor vector: line 36

и:

warning: incompatible implicit declaration of built in function 'malloc'

Спасибовсе!

Ответы [ 7 ]

3 голосов
/ 04 января 2012

result[array_val], вероятно, должно быть buffer[array_val], однако учтите, что это будет указывать только на случайный символ, а не на случайное слово.Кроме того, вы не сможете присвоить результат random_word, потому что типы несовместимы (вы не можете назначить массивы).Вы можете использовать memcpy или strcpy для копирования строки в массив, но будьте осторожны, перезапись памяти, которой вы не владеете, может привести к некоторому странному и непредсказуемому поведению.

Если всеслова в вашем файле разделены '\n' символами, затем в качестве подсказки вы можете сделать следующее:

  1. Перейти к случайному символу в вашем buffer
  2. Обратный поискк ближайшему '\n' или к первому символу буфера (в зависимости от того, который первый) у вас теперь есть указатель на первый символ случайного слова,
  3. Поиск вперед до ближайшего '\n',или до конца буфера (какой бы ни был первый), теперь у вас есть указатель на последний символ того же слова.
  4. Копирование в random_word от первого до последнего символа

Вам нужно включить <stdlib.h>, чтобы использовать malloc.

1 голос
/ 04 января 2012

Это пример malloc (): http://msdn.microsoft.com/en-us/library/6ewkz86d%28v=VS.71%29.aspx

Сначала я подумаю: 1. Вы используете malloc ();не нужно использовать массив, вы можете вызвать malloc ();

1 голос
/ 04 января 2012

random_word = result[array_val];

result - это size_t, что означает, что вы не можете применить к нему синтаксический индекс.

0 голосов
/ 04 января 2012

result это не массив, это просто переменная типа size_t.random - заголовок массива, поэтому его нельзя изменить.

0 голосов
/ 04 января 2012

Вы уже определили result как size_t, вы не можете реализовать в этом коде индексацию.

0 голосов
/ 04 января 2012

random_word = result[array_val];

random_word - это массив. Массивы нельзя назначать в C.

0 голосов
/ 04 января 2012

Чтобы включить правильную реализацию malloc(), вам нужно #include <stdlib.h>.

Ошибка, которую вы получаете из строки #36, весьма вероятна из-за способа вычисления позиции случайного слова, что не является надежным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...