1、使用區別
scanf()不會檢查輸入邊界,可能造成資料溢位。
scanf_s()會進行邊界檢查。
2、意思
scanf表示從鍵盤輸入指定格式的資料。如:scanf("%d",x);指從鍵盤給x輸入一個int型(整型)資料;scanf("%f",x);指從鍵盤給x輸入一個float型(實型)資料;對應的輸出為:printf 按照指定的格式輸出資料;如printf("%d",x); 指按整型資料輸出X中的值。
因為帶“_s”字尾的函式是為了讓原版函式更安全,傳入一個和引數有關的大小值,避免引用到不存在的元素,防止hacker利用原版的不安全性(漏洞)黑掉系統。
3、scanf_s()引數與scanf()不同
例如scanf(“%s”,&name,n),整形n為name型別的大小,如果name是陣列,那n就是該陣列的大小。
因為回車也是字元
scanf_s("%d%c", &i );
這句後面加個
getchar();
而且你這明明是兩個說明符,怎麼賦給一個變數,用%*c接收一個字元(但不賦值)
最後scanf_s和scanf的用法不同,需要三個引數,最後一個是要讀入的位元組數(用sizeof確定)
建議將程式中的所有scanf_s替換為scanf
然後在程式碼第一行前面加
#define _CRT_SECURE_NO_WARNINGS
遮蔽警告
scanf_s("%s",names[count],20);
================================
格式控制符:
%---格式說明引導符。
----指定左對齊輸出。
0---指定空位填零。
m.n --- 指定輸出域寬度及精度。
l.h---輸出長度的修正。
格式字元:
%i---輸出一個整型數;
%d---輸出一個整型數;
%f---輸出一個浮點數;
%e---輸出一個浮點數,科學計數法;
%g---輸出一個浮點數,當指數小於-4或者大於5,則運用科學計數法,否則正常顯示浮點數;
%c---輸出一個字元;
%o---輸出一個八進位制的整型數,前面不帶0;
%#o---輸出一個八進位制的整型數,前面帶0;
%x---輸出一個十六進位制的整型數,前面不帶0x;
%#x---輸出一個十六進位制的整型數,前面帶0x, 如果x大寫,則顯示的時候也是大寫。
%u---不帶符號的十進位制整數。
%%---輸出一個%.
跳脫字元:
\a:蜂鳴,響鈴
\b:回退:向後退一格
\f:換頁
:換行,游標到下行行首
:回車,游標到本行行首
\t:水平製表
\v:垂直製表
\\:反斜槓
\":單引號
\":雙引號
\?:問號
\ddd:三位八進位制
\xhh:二位十六進位制
\0:空字元(NULL),什麼都不做
printf的格式控制的完整格式:
% - 0 m.n l或h 格式字元
下面對組成格式說明的各項加以說明:
①%:表示格式說明的起始符號,不可缺少。
②-:有-表示左對齊輸出,如省略表示右對齊輸出。
④m.n:m指域寬,即對應的輸出項在輸出裝置上所佔的字元數。N指精度。用於說明輸出的實型數的小數位數。為指定n時,隱含的精度為n=6位。
⑤l或h:l對整型指long型,對實型指double型。h用於將整型的格式字元修正為short型。
1、使用區別
scanf()不會檢查輸入邊界,可能造成資料溢位。
scanf_s()會進行邊界檢查。
2、意思
scanf表示從鍵盤輸入指定格式的資料。如:scanf("%d",x);指從鍵盤給x輸入一個int型(整型)資料;scanf("%f",x);指從鍵盤給x輸入一個float型(實型)資料;對應的輸出為:printf 按照指定的格式輸出資料;如printf("%d",x); 指按整型資料輸出X中的值。
因為帶“_s”字尾的函式是為了讓原版函式更安全,傳入一個和引數有關的大小值,避免引用到不存在的元素,防止hacker利用原版的不安全性(漏洞)黑掉系統。
3、scanf_s()引數與scanf()不同
例如scanf(“%s”,&name,n),整形n為name型別的大小,如果name是陣列,那n就是該陣列的大小。
因為回車也是字元
scanf_s("%d%c", &i );
這句後面加個
getchar();
而且你這明明是兩個說明符,怎麼賦給一個變數,用%*c接收一個字元(但不賦值)
最後scanf_s和scanf的用法不同,需要三個引數,最後一個是要讀入的位元組數(用sizeof確定)
建議將程式中的所有scanf_s替換為scanf
然後在程式碼第一行前面加
#define _CRT_SECURE_NO_WARNINGS
遮蔽警告
scanf_s("%s",names[count],20);
================================
格式控制符:
%---格式說明引導符。
----指定左對齊輸出。
0---指定空位填零。
m.n --- 指定輸出域寬度及精度。
l.h---輸出長度的修正。
格式字元:
%i---輸出一個整型數;
%d---輸出一個整型數;
%f---輸出一個浮點數;
%e---輸出一個浮點數,科學計數法;
%g---輸出一個浮點數,當指數小於-4或者大於5,則運用科學計數法,否則正常顯示浮點數;
%c---輸出一個字元;
%o---輸出一個八進位制的整型數,前面不帶0;
%#o---輸出一個八進位制的整型數,前面帶0;
%x---輸出一個十六進位制的整型數,前面不帶0x;
%#x---輸出一個十六進位制的整型數,前面帶0x, 如果x大寫,則顯示的時候也是大寫。
%u---不帶符號的十進位制整數。
%%---輸出一個%.
跳脫字元:
\a:蜂鳴,響鈴
\b:回退:向後退一格
\f:換頁
:換行,游標到下行行首
:回車,游標到本行行首
\t:水平製表
\v:垂直製表
\\:反斜槓
\":單引號
\":雙引號
\?:問號
\ddd:三位八進位制
\xhh:二位十六進位制
\0:空字元(NULL),什麼都不做
printf的格式控制的完整格式:
% - 0 m.n l或h 格式字元
下面對組成格式說明的各項加以說明:
①%:表示格式說明的起始符號,不可缺少。
②-:有-表示左對齊輸出,如省略表示右對齊輸出。
④m.n:m指域寬,即對應的輸出項在輸出裝置上所佔的字元數。N指精度。用於說明輸出的實型數的小數位數。為指定n時,隱含的精度為n=6位。
⑤l或h:l對整型指long型,對實型指double型。h用於將整型的格式字元修正為short型。