如何填充结构中的char **数组

时间:2010-02-12 18:07:16

标签: arrays struct

   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;,因为我需要稍后将此结构作为参数传递给线程。所以我尝试为struct分配内存,然后为fileNames分配内存,但是Eclipse的调试器告诉我它在分配时无法访问fileNames。那么我该如何使用stats_pointer_t **sp;代替stats_pointer_t sp;

来执行此操作

2 个答案:

答案 0 :(得分:1)

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);

答案 1 :(得分:0)

我建议您使用类而不是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。