我有以下功能,有時會打「檢測到堆棧粉碎」。但是當我修改sprintf()
至snprintf(nbytes_buf, sizeof(nbytes_buf), "%d", nbytes)
時,問題就解決了。C snprintf sprintf堆棧粉碎檢測
'data'永遠不會超過1024個字節。所以,我認爲nbytes_buf [20]就足夠了。但是當'data'包含字符'>'時,我也會碰到「stack smashing detected」的問題。
有誰知道爲什麼?
int a(const char *data)
{
int nbytes;
char nbytes_buf[20];
nbytes = strlen(data);
sprintf(nbytes_buf, "%d", nbytes);
/* do something else */
return 0;
}
如果修改爲您所說的'snprintf(nbytes_buf,sizeof(nbytes_buf),nbytes)',那麼您傳遞'nbytes'作爲格式字符串的地址,這顯然是不正確的。也許'snprintf(nbytes_buf,sizeof(nbytes_buf),「%d」,nbytes)'會更有建設性。 **編輯**:或更改問題中的代碼。這也起作用。 – WhozCraig
謝謝。我已糾正。 – VincentHuang
您是否正在使用這種格式的字符串,類型和您的真實代碼中的所有內容? –