【问题标题】:C: sprintf leads to SIGSEGV core via an strlenC: sprintf 通过 strlen 通向 SIGSEGV 核心
【发布时间】:2010-06-28 09:09:53
【问题描述】:

我的 C 应用程序有以下两行:

char buf[1024];
sprintf(buf, "%s/game/rabbit/habit/cmd/talkPipe", getenv("APPLICATION_PATH"));

应用程序偶尔会以以下方式与 SIGSEGV 崩溃:

strlen(ff2ba231, 0, ffbfe1d0, 10, 7fff24d7, 0)+0x50
sprintf(ffbfe2a4, ff2ba231, 0, 74656400, 12, ff362ef2)+0x24
RabbitTalk(ffbfea80, ffbfee50, 1, d, ffbfea12, 0)+0x21c
...

任何人都可以提示问题出在哪里/什么地方吗?

非常感谢,

【问题讨论】:

    标签: c printf segmentation-fault strlen


    【解决方案1】:

    也许是因为 getenv 返回 NULL ?

    即使这不是手头的问题,您也应该检查 NULL :大多数老式 C 函数不会。

    【讨论】:

      【解决方案2】:

      如果环境变量不存在(未导出),getenv() 将返回NULL,这将导致SIGSEGV

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-10
        相关资源
        最近更新 更多