首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >p2==NULL和!*p2相同吗?

p2==NULL和!*p2相同吗?
EN

Stack Overflow用户
提问于 2017-02-18 13:59:21
回答 2查看 102关注 0票数 0

下面是代码

代码语言:javascript
复制
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)而不是if(!*p2),那么就会出现分段错误。为什么?

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

if(!*p2)是否与if(p==NULL)相同?

为什么我会有分割错误。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-18 14:01:29

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

在执行!*p2时,首先取消指针p2的引用,然后检查p2所指向的值是否为"false“。如果p2是空指针,则取消引用将无效。

票数 6
EN

Stack Overflow用户

发布于 2017-02-18 14:09:58

这不一样。当您执行*p2时,它从p2所指向的内存位置读取一个char。如果p2碰巧是NULL,则会导致分段错误,因为NULL (或0)不是可以读取或写入的合法内存位置。p2 == NULL检查指针本身是否为NULL

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42316068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档