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”,執行到第四行的時候就會報錯。