2012-12-23 135 views
-1

代碼:PERROR分段故障

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

作品。爲什麼? 我的問題不符合您的質量標準。

回答

3

這是您的分段錯誤:

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

在這段代碼,t輸入sprintf()。但是,t未初始化,因此sprintf()將在您的記憶中塗抹。幾乎不建議使用sprintf(),請使用snprintf()代替:

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

sprintf()由於t沒有被初始化爲指向任何存儲區,所以調用了一些隨機內存。這可能是崩潰。