代码:
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);
}
的工作原理。为什么? 我的问题不符合您的质量标准。
答案 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
未初始化为特别指向任何存储。这可能是崩溃的原因。