pt[-1] = 0是什么意思啊该怎么处理

pt[-1] = 0是什么意思啊?
C/C++ code

        char *pt = strstr(fn,HTTP_PROTO1);
        if (pt)
            pt[-1] = 0;



看一开源代码有一上面的部分代码,pt[-1]不知道是想干嘛,故意越界?
有人说pt[-1]就相当与pt-1 (退一格)


------解决方案--------------------
不清楚,但是顶。。。。
------解决方案--------------------
是的,从字符串fn中寻找HTTP_PROTO1第一次出现的位置,就是第一次出现的前一位设为字符串结束
------解决方案--------------------
如果pt指向fn的第0位,就会越界了
你可以看下你代码的上下文
可能查询结果一定不会指向第0位
------解决方案--------------------
下标-1就是定义的开始位置问题。

好像之前星羽有个贴子提过。可以找找看。
------解决方案--------------------
本意是查找fn中第一次出现HTTP_PROTO1的字符串,然后把后面的全部移除。
但是如果fn是以HTTP_PROTO1开头,那么就出现问题了。应该这样

char *pt = strstr(fn,HTTP_PROTO1);
if(pt && pt != fn)
pt[-1] = 0;

------解决方案--------------------
2楼说得对.

pt[-1]是往前倒退一个Byte的位置.
------解决方案--------------------
p[m]就是*(p + m)。
------解决方案--------------------
设置结束符
------解决方案--------------------
对了,就是将现在的指针位置向前移一个位置
------解决方案--------------------
int array[N];
int *p = array + 1;
p[-1] = 0; // -1 index 不代表越界,简单指针算术而已。