[英]sprintf_s caused for crash
我遇到問題了。 例:
try
{
char strMes[6];
sprintf_s(strMes, sizeof(strMes), "%s", "012345678");
printf(strMes);
}
catch(...)
{
printf("Wrong\n");
}
在調試環境中,這會導致調試器出現“緩沖區太小”消息。
在發布環境中,它導致崩潰。
我試圖將try-catch塊替換為__try -__ except(EXCEPTION_EXECUTE_HANDLER)塊,但是我得到了相同的行為。
我大約有1K調用sprintf_s函數,因此將sprintf_s替換為_snprintf_s並不是我的選擇。 (請參見sprintf_s的緩沖區太小 )
請幫忙!
在進一步使用strMes
之前, 必須檢查sprintf_s
的返回值。 否則,您如何知道緩沖區是否足夠大? sprinft_s
可能沒有任何內容寫入strMes
,因此仍未初始化。 這就是導致崩潰的原因(嘗試刪除sprintf_s
,它也可能崩潰。)
從sprintf_s
文檔:
寫入的字符數;如果發生錯誤,則為–1。 如果buffer或format是空指針,則sprintf_s和swprintf_s返回-1並將errno設置為EINVAL。
PS:由於try / catch,您應該將此問題標記為C ++,而不是C。
如果您的VS版本支持,則應在其上運行代碼分析。
了解有關代碼分析的信息
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.