как заполнить массив char **, который в структуре - PullRequest
1 голос
/ 12 февраля 2010
   typedef struct _stats_pointer_t
    {
     char **fileNames;
     stats_t stats;
    } stats_pointer_t;

Мне нужно заполнить 'fileNames'. По сути, мне нужно подражать этой функции:

char *fileNames[argc - 1];
fileNames[0] = argv[0];

... но с использованием struct stats_pointer. Поэтому мне нужно объявить структуру, а затем, вероятно, выделить память для массива, но я не уверен, если это необходимо. Наконец, мне нужно заполнить массив.

Редакция: мне нужно объявить новую структуру как stats_pointer_t **sp;, потому что мне нужно передать эту структуру в качестве аргумента потоку позже. Поэтому я попытался выделить память для структуры, а затем для fileNames, но отладчик Eclipse говорит мне, что он не может получить доступ к fileNames при его выделении. Так как я могу сделать это с stats_pointer_t **sp; вместо stats_pointer_t sp;

Ответы [ 2 ]

1 голос
/ 12 февраля 2010
stats_pointer_t p;

p.filenames = malloc(argc * sizeof *p.filenames);
for(int i = 0; i < argc - 1 ; i++) {
  p.filenames[i] = malloc(strlen(argv[i+1]) + 1);
  strcpy(p.filenames[i],argv[i+1]);
}
p.filenames[i] = NULL;

(и проверить на наличие ошибок - например, malloc возвращает NULL);

0 голосов
/ 12 февраля 2010

Я бы порекомендовал вам использовать класс вместо struct. Итак, в классе вы должны добавить конструктор и деструктор для создания и удаления вашего массива строк

Примерно так:

class MyClass
{
   private char** array;
   MyClass()
{
   array = new char*[<the size of your array here>];

}
   ~MyClass()
{
   //maybe free you string too here if it won't break some other code
   delete [] array;
}
};

Также fileNames[0] = argv[0]; не является хорошей практикой, потому что это может привести к нарушению памяти или утечкам памяти. Вам лучше использовать strcpy или strncpy, если вы не совсем уверены, что вы делаете, используя разделяемую память.

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