从命令行定义全局数组的大小

时间:2010-11-30 18:11:31

标签: c pthreads global-variables command-line-arguments semaphore

我正在做一项任务,我需要使用pthreads或信号量来同步一些访问某些共享资源的进程。由于我们在类中的所有示例都使用全局变量作为我计划执行相同操作的共享资源,但我希望将共享资源的值基于命令行参数。 我知道如何在main方法中使用命令行参数,但如何根据命令行参数定义全局数组(共享资源)的大小?

更新

Wallyk的答案似乎会起作用,但我仍然对一些更精细的细节感到模糊。请参阅示例和评论......

#include <stdio.h>

void print_array(void);

int *array;
int count;

int main(int argc, char **argv){
    int count = atoi(argv[1]);
    array = malloc(count *sizeof(array[0]));
    int i;
    for(i = 0; i < count; i++){ /*is there anyway I can get the size of my array without using an additional variable like count?*/
        array[i] = i;
    }
    print_array();
    return 0;
}

void print_array(){
    int i;
    for(i = 0; i < count; i++){
        printf("current count is %d\n", array[i]);
    }
}

2 个答案:

答案 0 :(得分:8)

您无法执行静态动态声明,例如:

int globalarray[n];

其中 n 是在运行时设置的变量。这不起作用,因为在程序开始运行之前初始化了数组。

一个好的选择是使用指向动态内存的指针:

int *globalarray;

int main (int argc, char **argv)
{
...
   int elements = atoi (argv [j]);  // parse out the program argument array size
   globalarray = malloc (elements * sizeof (globalarray[0]));
}

答案 1 :(得分:3)

指向malloc'd数组的全局指针是一种可能的解决方案。 所以你根据命令行参数malloc所需大小的数组,并使指向所有pthreads的数组的指针。