// 輸出中文
char sza[8];
wchar szw[8];
sprintf(sza, "%s", l"和平"); // 亂碼,四個位元組
sprintf(sza, "%s", "和平"); // 和平
sprintf(sza, "%s", l"和平"); // 零位元組
sprintf(sza, "%s", "和平"); // 零位元組
swprintf(szw, l"%s", l"和平"); // 和平,四個位元組
swprintf(szw, l"%s", "和平"); // 無法輸出,四個位元組,內容是ansi碼
swprintf(szw, l"%s", l"和平"); // 無法輸出,八個位元組,內容是unicode碼
swprintf(szw, l"%s", "和平"); // 無法輸出,八個位元組,內容是ansi碼
wsprintfa(sza, "%s", l"和平"); // 亂碼,四個位元組
wsprintfa(sza, "%s", "和平"); // 和平
wsprintfa(sza, "%s", l"和平"); // 和平
wsprintfa(sza, "%s", "和平"); // 亂碼,兩個位元組
wsprintfw(szw, l"%s", l"和平"); // 和平,四個位元組
wsprintfw(szw, l"%s", "和平"); // 無法輸出,四個位元組,內容是ansi碼
wsprintfw(szw, l"%s", l"和平"); // 無法輸出,六個位元組,內容是unicode碼
wsprintfw(szw, l"%s", "和平"); // 和平,八個位元組
// 輸出英文
char sza[8];
wchar szw[8];
sprintf(sza, "%s", l"well"); // w,乙個位元組
sprintf(sza, "%s", "well"); // well,四個位元組
sprintf(sza, "%s", l"well"); // well,四個位元組
sprintf(sza, "%s", "well"); // 零位元組
swprintf(szw, l"%s", l"well"); // well,八個位元組
swprintf(szw, l"%s", "well"); // 亂碼,四個位元組
swprintf(szw, l"%s", l"well"); // w,兩個位元組
swprintf(szw, l"%s", "well"); // well,八個位元組
wsprintfa(sza, "%s", l"well"); // w,乙個位元組
wsprintfa(sza, "%s", "well"); // well,四個位元組
wsprintfa(sza, "%s", l"well"); // well,四個位元組
wsprintfa(sza, "%s", "well"); // 亂碼,四個位元組
wsprintfw(szw, l"%s", l"well"); // well,八個位元組
wsprintfw(szw, l"%s", "well"); // 亂碼,四個位元組,內容是ansi碼
wsprintfw(szw, l"%s", l"well"); // w,兩個位元組
wsprintfw(szw, l"%s", "well"); // well,八個位元組
格式化輸出 s和 S的區別
使用s時,printf是針對單位元組字元的字串,而wprintf是針對寬字元的 使用s時,正好相反,printf針對寬字元 cstring中的format與printf類似,在unicode字符集的工程中,使用 cstring str1,str2 str1.format t s str2 時 s專指...
格式化輸出 s和 S的區別
使用s時,printf是針對單位元組字元的字串,而wprintf是針對寬字元的 使用s時,正好相反,printf針對寬字元 cstring中的format與printf類似,在unicode字符集的工程中,使用 cstring str1,str2 str1.format t s str2 時 s專指...
格式化字串小實驗
在 裡看到格式化字串攻擊的說明,不是很理解,決定實踐一下,結合tim newsham的format string attacks 進行實驗。這裡只測試了一下 x和 n引數,更多種類的格式化字串攻擊請查閱其他資料。至於測試的環境,應當是c編譯環境都可以,但是在實驗過程中,我發現dev c 預設不對 n...