为什么printf导致分段错误?

时间:2013-10-04 19:53:39

标签: c environment-variables printf c-strings

我有这段代码:

char* env;

if (getenv("MP") == NULL)
{
    env = "/usr";
}
else
{
    env = getenv("MP");
}

printf("($MP is %s)\n", env);
printf("The program seg faults without printing me :(");

如果未设置$ MP环境变量,程序在第一次打印后似乎会出现故障。如果设置,则没有seg错误,一切正常。

2 个答案:

答案 0 :(得分:3)

如果我不包含stdlib.h

,我可以让您的程序陷入段错误

即。试试这个:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char* env;

    if (getenv("MP") == NULL)
    {
        env = "/usr";
    }
    else
    {
        env = getenv("MP");
    }

    printf("($MP is %s)\n", env);
    printf("The program seg faults without printing me :(");

    return 0;
}

答案 1 :(得分:0)

你为什么不这样做?

const char *env = getenv("MP");
if (!env)
    env = "/usr";