指针的加法或减法没有正确限制

以下代码具有未定义的行为:

char buffer[6] = "hello";
char *ptr1 = buffer - 1;  /* undefined behavior */
char *ptr2 = buffer + 5;  /* OK, pointing to the '\0' inside the array */
char *ptr3 = buffer + 6;  /* OK, pointing to just beyond */
char *ptr4 = buffer + 7;  /* undefined behavior */

根据 C11,如果将指针添加或减去数组对象和整数类型会产生一个不指向或超出同一数组对象的结果,则行为是未定义的(6.5.6) )。

此外,取消引用指向数组之外的指针自然是未定义的行为 :

char buffer[6] = "hello";
char *ptr3 = buffer + 6;  /* OK, pointing to just beyond */
char value = *ptr3;       /* undefined behavior */