" [错误]左值作为赋值的左操作数"

时间:2016-11-27 12:11:04

标签: c file pointers memory-management struct

scoreGrid为得分**,以10分*创建。我试图初始化每个Score *,从名为rank的二进制文件中读取。 Score是一个带有int和char的简单结构[7]。

Score** scoreGrid;
scoreGrid = (Score**)calloc(1,sizeof(Score*)*10);
if(!scoreGrid){
    endOnScore();
}

int res, i, j;
for(i=0;i<10;i++){
    ((*scoreGrid) + i * sizeof(Score*)) = (Score*)malloc(sizeof(Score)); //[Error] lvalue required as left operand of assignment
    if(!(*scoreGrid + i * sizeof(Score*))){
        endOnScore();
    }
    res = fread((*scoreGrid + i * sizeof(Score*)),sizeof(Score),1,rank);
    printf("res: %d\n", res);
    if(res == 0){
        free((*scoreGrid + i * sizeof(Score*)));
        break;
    }   
}

我评论了我收到错误的地方..有人知道可能是什么?也许有更好的解决方案?谢谢!

1 个答案:

答案 0 :(得分:3)

((*scoreGrid) + i * sizeof(Score*))相当于scoreGrid[0] + i * sizeof(Score*),这不是您想要的。

如果您坚持不使用数组访问权限,则应编写(*(scoreGrid + i)),这相当于scoreGrid[i]

要以可读的方式解决问题,请将所有((*scoreGrid) + i * sizeof(Score*))替换为scoreGrid[i]