1
MeteorCat 2018-09-04 19:33:56 +08:00 via Android
char 指针默认指向首位,+3 位移三位
|
2
May725 2018-09-04 19:38:03 +08:00 via iPhone
楼上正解,可以搜索下指针的运算
|
3
harry890829 2018-09-04 19:46:05 +08:00
c 语言的话,主要是有个结构体内存对其的东西,所以你可以通过 data 做减法之后,获得结构体之前的变量。
|
5
yanggis OP 谢谢各位回复。现在我碰到这个问题:就是在第一个代码:
ret = http_protocol->parse_packet(buf->data + 3 + abuf->len, buf->len - 3 - abuf->len, &hostname); 执行之后,我还想把字符串指针移回原来的位置,解析数据包的 path 变量,代码是这样: pathret = http_protocol->parse_path(buf->data - 3 - abuf->len, buf->len - 3 - abuf->len, &hostname); 这个时候就直接报 segmentation fault 崩溃了。按说上面函数执行之后,我用 buf->data - 3 - abuf->len 是把指针又移动回了原来的位置啊,然后获取同样 buf->len - 3 - abuf->len 长度的数据,为什么会崩溃呢? |
6
wevsty 2018-09-04 20:08:34 +08:00
@yanggis
要想知道具体的含义,得知道 parse_path 这个函数是干嘛的,几个参数都是什么东西,返回值是什么东西。 没有上下文的基础上只能给你语义层面的回答。 得到 segmentation fault 有可能是 parse_path 函数内部对 buf->data - 3 - abuf->len 这个地址上的内容做了什么操作,比如直接 free 掉了。 |
7
angryRabbit 2018-09-04 20:13:14 +08:00
buf->len - 3 - abuf->len。这就相当于 x-3-y。
buf->len 这叫 dereference,说明 buf 是个指针! buf 如果是 struct,需要用点号 |
8
linshuang 2018-09-12 10:23:44 +08:00
parse_packet(buf->data + 3 + abuf->len, buf->len - 3 - abuf->len, &hostname)
第一个参数为指向 buf 里 data 的第 p 个( p 为 3+abuf 的长度)字符的指针,也就是取 data 的后一部分。 第二个参数就是 buf 这个串长减 p,差不多是从 p 位置开始剩余的数据长度,也就是定 data 后一部分的长度。 如果看成 string (当然并不是)那么对应更高级语言里的 subString |