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;
答案 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。