代码:
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
没有初始化为指向任何特定的存储。这可能就是崩溃的原因。