2015-03-18 2 views
1

У меня есть несколько файлов, которые я читаю в массиве char, я хотел бы сохранить содержимое, которое я прочитал из каждого файла, в массиве символов, чтобы я мог получить доступ к отдельные массивы символов (содержимое файла) по индексу, я не уверен в синтаксисе о том, как это сделать.Выделение массива указателей char

Я понимаю, что мне нужно установить каждый из адресов памяти в массиве паттернов на один адрес памяти для каждого массива символов; в массив символов, хранящийся в patternData, но я не знаю, как это установить. Каков синтаксис, который мне не хватает, что мне нужно, чтобы это произошло?

То, что я пытался

я бы подумал, что если я хранил тип char*, то я должен был бы тип char** для хранения отдельных массивов символьных массивов.

я получить доступ к char* бы, используя следующие обозначения, чтобы установить адрес памяти индекса шаблона для

&patterns[INDEX] = &pData; 

Однако это не работает. Существует множество аргументов «char pointer array», но я не уверен в правильном способе сделать это простое присвоение pData индексу шаблонов.

char *tData; 
int tLength; 
char *pData; 
int pLength; 

char **patterns; 

void ReadFromFile(FILE *f, char **data, int *length) //This is what is passed into function 


    int main(int argc, char **argv) 
    { 
     for (int i = 1; i <= 5; i++) 
     { 
      FILE *f; 
      char fileName[1000]; 
      sprintf(fileName, "file%d.txt", i); 
      f = fopen(fileName, "r"); 
      if (f == NULL) 
       return 0; 

      ReadFromFile(f, &pData, &pLength); //works to here, contents of file assigned to pData 
      fclose(f); 

      &patterns[i - 1] = &pData; 

     } 

     return 0; 

    } 
+0

Не следует ли читать 'patterns [i-1] = pData;'? – nlu

ответ

2

Эта линия является неправильным:

&patterns[i - 1] = &pData; 

Вы пытаетесь присвоить результат «взять адрес» оператора, который не возможно, потому что это не является именующий.

Назначение должно быть следующим:

patterns[i - 1] = pData; 

но вам нужно выделить patterns, прежде чем сделать это. Вы можете использовать

patterns = malloc(sizeof(char*)*5); 

или просто объявить patterns быть массивом из пяти:

char *patterns[5]; 

Это предполагает, что ваша ReadFromFile функция выделяет char*, и присваивает его адрес, на который указывает pData. Обратите внимание, что вам необходимо указать free все указатели, которые были получены через malloc/calloc/realloc.

+0

Это сработало отлично. Спасибо, отметив ответ – Oliver

0

Я не читал особенно тщательно, но мне кажется странным, что вы принимаете ссылку на образцы, когда это **. Это в строке:

&patterns[i-1] = &pData; 
+0

Извините, я думаю, что это строка, написанная с врожденной путаницей, мне в основном нужно назначить адрес памяти при этом индексе шаблонов на адрес pData – Oliver

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