在尝试运行下面的代码时,这些代码会涉及结构,但是我在第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);
}
答案 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;
}