perror分段错误

时间:2012-12-23 06:05:55

标签: c segmentation-fault

代码:

void w(char* c, int i)
{
    char * t;
    sprintf(t, "%d", i);
    perror(c);
    perror(t);
}

int main(void)
{
    w("qwe", 5);
    return 0;
}

导致分段错误,但

int main(void)
{
    perror("qwdasda");
    w("qwe", 5);
}

的工作原理。为什么? 我的问题不符合您的质量标准。

2 个答案:

答案 0 :(得分:3)

以下是您的细分错误:

char *t;
sprintf(t,"%d",i);

在此代码中,t输入sprintf()。但是,t未初始化,因此sprintf()会在您的记忆中涂鸦。几乎不建议使用sprintf(),而是使用snprintf()

char buf[32];
snprintf(buf, sizeof(buf), "%d", i);

答案 1 :(得分:2)

sprintf()调用正在踩踏一些随机内存,因为t未初始化为特别指向任何存储。这可能是崩溃的原因。