2012-05-10 13 views
0

我正在與_snprintf_s這個奇怪的錯誤:錯誤_snprintf_s

int ival = strlen("F(LL)L"); 
char buff[32]; 
memset(buff,0,sizeof(buff)); 
_snprintf_s(buff,strlen("F(LL)L"),_TRUNCATE,"%s","F(LL)L"); 

在BUFF只"F(LL)"是即使字符串長度計算複製爲6萬一 我指定的長度參數爲strlen("F(LL)L") + 1完整的字符串被複制。

回答

7

_snprintf_s()的第二個參數是目標緩衝區的大小(以字節爲單位)。一個字節必須爲終止的NUL字符保留,這就是爲什麼不復制輸入字符串的最後一個字符的原因。

這將是更好(和更安全的)來傳遞的緩衝液代替所述輸入的字符串的長度的實際尺寸:

_snprintf_s(buff, sizeof(buff), _TRUNCATE, "%s", "F(LL)L");