我發現這個代碼,看看,printf只有一個參數。並且,它工作!我所有關於printf的知識都是printf(「format」,...);但爲什麼這個代碼工作?任何答案都會有幫助。謝謝。Printf的參數
1 #include <stdio.h>
2
3 int main()
4 {
5 char a[]= "hello world";
6 printf(a);
7 return 0;
8 }
~
我發現這個代碼,看看,printf只有一個參數。並且,它工作!我所有關於printf的知識都是printf(「format」,...);但爲什麼這個代碼工作?任何答案都會有幫助。謝謝。Printf的參數
1 #include <stdio.h>
2
3 int main()
4 {
5 char a[]= "hello world";
6 printf(a);
7 return 0;
8 }
~
a
是格式。然而,這種用法是非常危險的,因爲很多人忘記了a
是一種格式,而是認爲它是一個字面字符串。不同之處在於,如果a
碰巧包含%
,它將被解釋爲一個格式說明符,但您沒有參數可供說明符使用。
當打印printf
一個消息字符串,你應該總是做,而不是:
printf("%s", a);
或者,如果合適的只是使用puts
。
a
被視爲不包含格式說明符的格式字符串。
通常,printf()
將掃描格式字符串,打印任何非格式說明符。當它遇到說明符時,它解碼它,然後從變量參數列表中獲取參數,根據說明符對其進行格式化,然後輸出它,然後在循環中繼續,直到達到字符串的末尾。
由於a
不包含格式說明符,因此printf()
不從變量參數列表中取得參數。
一般來說,printf()
不應該用於以這種方式打印任意字符串。如果程序只打印字符串,可以使用fputs()
代替:
fputs(a, stdout);
printf
是一個帶有可變參數列表的函數。第一個參數是一個被解析以查找格式細節的字符串。在你給出的例子中,沒有格式化細節(以%
開頭的字段)。因此,沒有更多的參數需要打印和代碼工作。
int printf (const char * format, ...);
是用必需的參數,format
並且可以是一個列表或零個或更多的元件,通過...
表示的列表的參數的函數。
因此,printf(a);
是簡單地printf()
呼叫只用必要的參數。
1爲'的printf( 「%S」,一個);. – jxh
@R ..我知道printf(「%s」,a);我對printf(a)感到困惑,我認爲它永遠不會編譯:)。謝謝。 –