c-错误分割错误



代码:

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

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

这是您的分割错误:

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

在该代码中,t被输入到sprintf()。但是,t未初始化,因此sprintf()会在您的内存上乱写。几乎从不建议使用sprintf(),而是使用snprintf()

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

sprintf()调用占用了一些随机内存,因为t没有初始化为指向任何特定的存储。这可能就是崩溃的原因。

最新更新