GCC错误;下标值既不是数组,也不是指针,也不是向量

时间:2018-07-26 14:31:52

标签: c gcc data-structures

在尝试运行下面的代码时,这些代码会涉及结构,但是我在第26,27,28行不断收到错误消息“下标值既不是数组,也不是指针,也不是向量”,试图在此为我的结构设置值,并在35 sprintf()函数

我的代码

struct Pending{

        char JOB[60];
        int Priority;
        float Left_time;
}PendingJOB_;

        //Status check code
        char sline[256];
        FILE *Sfptr;
        Sfptr = fopen("Busy_list.txt","r");

        int No_of_jobs_left = 0;
        char PendingJobClientID[20];

        for(int i=0; fgets(sline,sizeof(sline),Sfptr); i++){

            char** Parts;
            Parts = Split(sline,'\t');

            strcpy(PendingJobClientID,*(Parts+0));
            if(strcmp(PendingJobClientID,Owner) == 0){

                No_of_jobs_left++;
                int remainingjobs_positions = ++i;

                strcpy(PendingJOB_[i].JOB,*(Parts+1));
                PendingJOB_[i].Priority = atoi(Parts[2]);
                PendingJOB_[i].Left_time = (span*remainingjobs_positions);//Span was a globally declared variable
            }
        }
        send(client_socket, &No_of_jobs_left, sizeof(No_of_jobs_left), 0);

        for (int i = 0; i < No_of_jobs_left; i++){
            char StatusResult[1024];
            sprintf(StatusResult,"%s\t%d\t%.8f",PendingJOB_[i].JOB,PendingJOB_[i].Priority,PendingJOB_[i].Left_time);
            send(client_socket, &StatusResult, sizeof(StatusResult), 0);
        }

1 个答案:

答案 0 :(得分:2)

变量PendingJOB_是结构的单个实例,而不是数组,因此您不能像数组一样索引它,即PendingJOB_[i]

您需要将其声明为数组:

struct Pending PendingJOB_[10];

这将创建一个大小为10的数组。如果您对数组的最大大小有所了解,可以在此处进行设置。如果不确定数组需要多大,则可以动态地创建它,而可以使用malloc并以一定的起始大小:

int size = 10;
struct Pending *PendingJOB_ = malloc(sizeof(*PendingJOB_) * size);
if (!PendingJOB_) {
    perror("malloc failed");
    exit(1);
}

然后,您可以根据需要使用realloc来扩展数组:

if (i >= size) {
    size *= 2;
    struct Pending *temp = realloc(PendingJOB_, sizeof(*PendingJOB_) * size);
    if (!temp) {
        perror("realloc failed");
        exit(1);
    }
    PendingJOB_ = temp;
}