c-是p2 == null和!*p2相同



以下是代码

char* StrStr(const char *str, const char *target) {
  if (!*target) return str;
  char *p1 = (char*)str;
  while (p1 != NULL) {
    char *p1Begin = p1, *p2 = (char*)target;
    while (*p1 && *p2 && *p1 == *p2) {
      p1++;
      p2++;
    }
    if (!*p2)
      return p1Begin;
    p1 = p1Begin + 1;
  }
  return NULL;
}

如果我使用if(p2 == null)而不是(!*p2),那么我会得到分段故障。为什么?

第14行http://codepad.org/zuqxvcj9

是(!*p2)与(p == null)?

相同

为什么我会得到细分故障。

no p2 == NULL!*p2不同。如果有的话,p2 == NULL等于!p2

进行!*p2时,您首先 dereference 指针p2,然后检查值 p2是否为指向 to为" false"。如果p2是一个无效的指针,则解除将无效。

不是相同的。当您执行*p2时,它将从内存位置读取char p2指向。如果p2恰好是NULL,则会导致分割故障,因为NULL(或0)无需读取或写入法律内存位置。p2 == NULL检查指针本身是否是NULL

相关内容

  • 没有找到相关文章

最新更新