-1

代码:

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);
}

作品。为什么?我的问题不符合你们的质量标准。

4

2 回答 2

3

这是您的分段错误:

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

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

char buf[32];
snprintf(buf, sizeof(buf), "%d", i);
于 2012-12-23T06:12:42.573 回答
2

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

于 2012-12-23T06:12:15.450 回答