我在linux上使用gcc编译器编译.c程序,
但是,我收到的错误显示为"错误:左值作为赋值的左操作数"
错误是由于代码行所示,如下所示
(socklen_t*)saddr_size=*(data2.ssize);
我可以知道如何调试此问题吗?
它们在结构中声明为
struct fields{
void* b;
struct sockaddr *s;
socklen_t *ssize;
}data2;
int saddr_size;
答案 0 :(得分:1)
您的代码是荒谬的。尝试
saddr_size = (int)(*data2.ssize);
但是......为什么saddr_size声明了?尝试
socklen_t saddr_size;
...
saddr_size = *data2.ssize;
我也想知道为什么size是指针,而不是尺寸本身。
答案 1 :(得分:1)
您将左侧值转换为socklen_t *指针类型,但右侧值为socklen_t类型,因此会打印此错误。我和Jim Balter有同样的问题,你应该确保socklen_t类型可以用int表示。我的意思是如果int是32个字节,socklen_t会超过32个字节吗? 你应该声明saddr_size socklen_t类型
答案 2 :(得分:0)
尝试将其更改为
*(socklen_t *)& saddr_size = *(data2.ssize)
答案 3 :(得分:0)
在C中,左值是一个“左”值,表示分配值有效的标记。因此编译器告诉您赋值表达式左侧的标记无效。