天天看點

C++中printf()函數的用法51 打開%n的開關2 使用%n

printf()函數的type是%n時,不是表示列印資料,而是将列印資訊的數量儲存到指定的變量中,需要注意的是,在printf()函數中使用%n時,其對應的參數是變量的位址。

1 打開%n的開關

當printf()使用%n時,會有不安全的隐患,是以,預設情況下,%n是不能使用的。如果需要使用,則要打開%n的開關。

1.1 擷取%n的開關狀态

通過_get_printf_count_output()函數擷取目前%n的開關狀态。如果%n是不能使用,則傳回值是0,否則傳回值是1。

​​​​​​​1.2 設定%n的開關狀态

通過_set_printf_count_output()函數設定%n的開關狀态。當該函數的參數是0時,則關閉%n的開關,如果參數是非零值,則打開%n的開關。_set_printf_count_output()函數的傳回值是修改之前的%n的開關狀态,不能使用,則傳回值是0,否則傳回值是1。

2 使用%n

以下代碼在printf()中使用了%n

int a;

int e;

e = _get_printf_count_output();

if (e == 0)

{

  _set_printf_count_output(1);

}

printf("12345%n", &a);
           

此時,a的值是%n之前的字元串的長度,即此時a的值是5。如果%n的位置變為

printf("123%n45", &a);
           

此時,a的值是%n之前的字元串的長度,即a的值是3。

繼續閱讀