我如何调试错误:左值作为赋值的左操作数需要左值?

时间:2013-11-22 06:34:29

标签: c sockets

我在linux上使用gcc编译器编译.c程序,

但是,我收到的错误显示为"错误:左值作为赋值的左操作数"

错误是由于代码行所示,如下所示

 (socklen_t*)saddr_size=*(data2.ssize);

我可以知道如何调试此问题吗?

它们在结构中声明为

 struct fields{ 
     void* b;   
     struct sockaddr *s;
     socklen_t *ssize;

 }data2; 

 int saddr_size;

4 个答案:

答案 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中,左值是一个“左”值,表示分配值有效的标记。因此编译器告诉您赋值表达式左侧的标记无效。