这个指针繁重的C代码做了什么?

时间:2014-06-07 15:19:02

标签: c pointers

有人可以向我解释下面两行应该做什么:

s.httpheaderline[s.httpheaderlineptr] = *(char *)uip_appdata;
++((char *)uip_appdata);

这取自微控制器的uIP代码。

s - 结构
httpheaderline - http包呈现为字符串
httpheadrlineptr - 整数值
uip_appdata - 收到以太网数据包(字符串)

如果需要更多信息,请告诉我们。

顺便说一句。 Eclipse在第二行报告错误,消息增量无效左值,所以我试图弄清楚如何解决这个问题。

1 个答案:

答案 0 :(得分:2)

第一行背后的意图是抓取uip_appdata指向的字符:

*(char *)uip_appdata

uip_appdata转换为char*,然后取消引用它,从而获取第一个字符。

第二行尝试增加uip_appdata。问题是,它没有正确地执行,因为演员的结果不能“就地”增加。

这是一种有效的方法:

char *tmp = uip_appdata;
uip_appdata = ++tmp;

使用此代码片段,编译器可以在平台需要时处理指针类型之间的转换。

以下是关于ideone的demo of this concept