下列資訊適用於任何 scanf 系列的函式,包含安全版本,例如 scanf_s。
type 字元是唯一必要的格式欄位;它會在任何選擇性的格式欄位之後出現。 type 字元會決定相關聯的引數是否會解譯為字元、字串或數字。
type 函式的 scanf 字元
| 字元 | 預期輸入類型 | 引數類型 | 安全版本中的大小引數為何? |
|---|---|---|---|
c |
字元。 搭配 scanf 函式使用時,會指定單一位元組字元;搭配 wscanf 函式使用時,會指定全形字元。 指定 c 時,會讀取通常會跳過的空白字元。 不同於其他類型欄位,欄位寬度規範會指出確切的字元數,而不是最大值。 若要讀取下一個非空白單一位元組字元,請使用 %1s;若要讀取下一個非空白寬字元,請使用 %1ws。 |
搭配 char 函式使用時會指向 scanf ,搭配 wchar_t 函式使用時會指向 wscanf 。 |
必要。 大小不包含 Null 終止符的空間。 |
C |
相反大小字元。 搭配 scanf 函式使用時,會指定全形字元;搭配 wscanf 函式使用時,會指定單一位元組字元。 指定 C 時,會讀取通常會跳過的空白字元。 不同於其他類型欄位,欄位寬度規範會指出確切的字元數,而不是最大值。 若要讀取下一個非空白單一位元組字元,請使用 %1s;若要讀取下一個非空白寬字元,請使用 %1ws。 |
搭配 wchar_t 函式使用時會指向 scanf ,搭配 char 函式使用時會指向 wscanf 。 |
必要。 Size 自變數不包含 Null 終止符的空間。 |
d |
十進位整數。 | 指向 int。 |
否。 |
i |
整數。 若輸入的字串開頭為「0x」或「0X」則屬於十六進位,若字串開頭為「0」則屬於八進位,否則為十進位。 | 指向 int。 |
否。 |
o |
八進位整數。 | 指向 int。 |
否。 |
p |
十六進位數字中的指標位址。 讀取的位數上限取決於指標的大小(32 位或64位),這取決於機器架構。 "0x" 或 "0X" 視為前置詞。 | 指向 void*。 |
否。 |
u |
不帶正負號的十進位整數。 | 指向 unsigned int。 |
否。 |
x |
十六進位整數。 | 指向 int。 |
否。 |
e、、Ef、F、、g、G |
浮點值包含選用正負號 (+ 或 -)、一或多個一系列包含小數點的十進位數字,以及後面接著選擇性帶正負號的整數值之選擇性指數 (「e」或「E」)。 | 指向 float。 |
否。 |
a, A |
浮點數值包含一系列一或多個十六進位數字,該類數字包含選擇性小數點,以及後面接著十進位值的指數 ("p" 或 "P")。 | 指向 float。 |
否。 |
n |
沒有從資料流或緩衝區輸入讀取。 | 指向用來成功儲存字元數的 int,它會從資料流或緩衝讀取字元數,直到目前呼叫 scanf 函式或 wscanf 函式為止。 |
否。 |
s |
字串,最多至第一個空白字元 (空格、定位字元或新行字元)。 若要讀取未以空格字元分隔的字串,請使用一組方括號 ([ ]),如寬度規格中所述scanf。 |
搭配 scanf 函式使用時,表示單一位元組字元;搭配 wscanf 函式使用時,表示全形字元陣列。 在任一情況下,字元陣列必須有足夠大的空間,以便納入輸入欄位以及自動加上之結束的 null 字元。 |
必要。 大小包含 null 結束字元的空間。 |
S |
相反大小字串,最多至第一個空白字元 (空格、定位字元或新行字元)。 若要讀取未以空格字元分隔的字串,請使用一組方括號 ([ ]),如寬度規格中所述scanf。 |
搭配 scanf 函式使用時,表示寬字元陣列;搭配 wscanf 函式使用時,表示單一位元組字元陣列。 在任一情況下,字元陣列必須有足夠大的空間,以便納入輸入欄位以及自動加上之結束的 null 字元。 |
必要。 大小包含 null 結束字元的空間。 |
如有必要,大小自變數應該在套用自變數之後立即傳入參數清單中。 例如,下列程式碼:
char string1[11], string2[9];
scanf_s("%10s %8s", string1, 11, string2, 9);
會將最大長度 10 的字串讀取至 string1,並將最大長度 8 的字串讀取至 string2。 緩衝區大小應該至少比寬度規格多出一個空間,因為空間必須保留給 null 結束字元。
格式字串可以處理單一位元組或寬字元輸入,無論使用單一位元組字元或寬字元版本的函式。 因此,若要使用 scanf 函式和 wscanf 函式來讀取單一位元組或寬字元,請使用下列的格式指定名稱。
| 若要將字元讀取為 | 使用此函數 | 使用這些格式指定名稱 |
|---|---|---|
| 單一位元組 | scanf 函式 |
c、 hc或 hC |
| 單一位元組 | wscanf 函式 |
C、 hc或 hC |
| 全形 | wscanf 函式 |
c、 lc或 lC |
| 全形 | scanf 函式 |
C、 lc或 lC |
若要使用與 scanf 函式和 wscanf 函式掃描字串,請使用上方表格搭配格式型別指定名稱 s 和 S ,而非 c 和 C。