84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
printf 语句和 printf_s 语句到底有什么区别在VS2013编译环境当中? 最近,在用VS2013编写C语言的程序,这个问题老是在我脑海里面。另外想问一下为什么,必须用scanf_s,不能用scanf语句呢?
认证高级PHP讲师
The main difference between printf_s and printf is that printf_s checks the format string for valid formatting characters, whereas printf only checks if the format string is a null pointer.
MSDN printf_s
所以,printf和printf_s的差別在於printf只會檢查格式字串是否為空,而printf_s也會檢查使用者自訂的格式字串是否合法。舉例:
char* test = "Hello world!"; char* formatStr = "%s%d%h\n"; printf(formatStr, test,10); printf_s(formatStr, test, 10);
第二行給的格式字串是有問題的,但是第三行printf仍然可以輸出“Hello world!10”,執行到第四行的時候就會報錯。
MSDN printf_s
所以,printf和printf_s的差別在於printf只會檢查格式字串是否為空,而printf_s也會檢查使用者自訂的格式字串是否合法。舉例:
第二行給的格式字串是有問題的,但是第三行printf仍然可以輸出“Hello world!10”,執行到第四行的時候就會報錯。