首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >strcmp行为

strcmp行为
EN

Stack Overflow用户
提问于 2011-02-08 20:14:59
回答 3查看 20.6K关注 0票数 14

当我运行以下代码时:

代码语言:javascript
复制
#include <stdio.h>

int main(int argc, char *argv[])
{
    int p = 0;

    p = strcmp(NULL,"foo");

    return 0;
}

我得到了分段错误。echo $?说是139。但是当我跑的时候

代码语言:javascript
复制
#include <stdio.h>

int main(int argc, char *argv[])
{
    int p = 0;

    strcmp(NULL,"foo"); // Note removed assignment

    return 0;
}

我没有得到任何分割错误。有没有人能给我点光?

这是我的gcc信息:

代码语言:javascript
复制
> gcc --version
gcc (GCC) 3.4.6 20060404 (Red Hat 3.4.6-8)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-08 20:22:33

您可能在编译时使用了优化选项。由于第二个代码片段中的strcmp()结果被忽略,编译器消除了这个函数调用,这就是程序不会崩溃的原因。只有因为strcmp()是一个内部函数,编译器才会意识到这个函数没有任何副作用,才能消除此调用。

票数 30
EN

Stack Overflow用户

发布于 2011-02-08 20:22:17

您需要:

  • 包含正确的头文件,或者手动声明函数。对于strcmp(),您需要<string.h>.
  • Not将无效指针(如NULL )传递给strcmp(),因为它不会对此进行保护,而是会取消对该指针的引用,从而在您的程序中导致未定义的行为。
票数 6
EN

Stack Overflow用户

发布于 2011-02-08 20:20:44

您正在做的事情是未定义的。strcmp需要指向以null结尾的字符串的有效指针。

NULL不是指向以null结尾的字符串的指针。

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

https://stackoverflow.com/questions/4932848

复制
相关文章

相似问题

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