2012-08-25 22 views
-3

地址,我們怎麼可以寫這種類型的語法可我們通過格式說明串給printf

#include<stdio.h> 
main() 
{ 
    char *str; 
    str="%s"; 
    printf(str,"K\n"); 
    return 0; 
} 

printf聲明是否有效?

+8

你真的應該讀一些關於C的書... – xQuare

+2

停下來。關閉瀏覽器。拿起一份[K&R](http://www.amazon.com/C-Programming-Language-2nd-Edition/dp/0131103628),[Practical C programming](http://www.amazon.com/ Practical-Programming-3rd-Steve-Oualline/dp/1565923065 /)和/或[Head First C](http://www.amazon.com/Head-First-C-David-Griffiths/dp/1449399916/) 。 **讀**。 – 2012-08-25 07:13:09

回答

3

是的,它是有效的,因爲你的strchar *類型。這是printf函數原型:

int printf (const char * format, ...); 

從調用函數的觀點,你的聲明將是相同的:

printf("%s","K\n"); 

隨着"%s""K\n"是類型char *的常量表達式。

+0

thankx我得到了點 –

+3

你是說'printf'調用是無效的,因爲他沒有在main中指定返回類型? – xQuare

1

是的,語法是有效的。這一方案的結果是字符串「K \ n」

\ n表示換行符。

這%s告訴printf的,這將是在打印的第一個參數應打印爲字符串。

看到這個:http://www.cplusplus.com/reference/clibrary/cstdio/printf/

這是一個非常簡單的程序。在您提出這個問題的時候,您可以自己編譯並運行程序並看到答案。你通過做最好的學習。

3

的函數調用printf()是有效的,因爲作爲第一個參數,它預計作爲格式說明一個常量字符串。不要考慮將字符串放在引號之間的東西 - 把它看作是一個字符數組(加上一個終止的0字符)。在C中(以及任何有意義的編程語言),只要有一個值,其類型和實際值/內容就決定了它的行爲 - 讓它成爲一個文字,一個變量或任何其他表達式(我們現在不考慮const正確性爲了簡單起見)。像數學,這不要緊,你是否寫

3 + 2 = 5 

x = 3 
y = 2 
x + y = 5 

這裏的第二個平等的三線仍然有效,儘管X和Y不是文字。它們是變量,在處理它們時使用它們的當前值。

現在有一個關於const正確性的小問題,其他答案缺乏:字符串文字的類型爲const char *,而不是char *,因爲您無法更改其內容。因此,它不是真正的好寫

char *foo = "blah blah"; 

寫,而不是

const char *foo = "blah blah"; 
+0

不幸的是字符串文字的類型爲char [],不是(指針而不是'const')。你也錯過了'main'的無效規範。 –

+0

@JensGustedt什麼?不是const?我一直認爲這是常量。 Btw不是無關緊要的,不管它是數組還是指針?它只是一維的,我不想爲字符串文字分配任何東西,所以實際上它可以用作指針。並且修改其內容**是**未定義的行爲,所以它必須是const ... – 2012-08-25 16:41:52

+0

不,不是'const' :(而且它恰好是UB。如果類型是'const'限定,它將是一個違反約束並強制診斷,然後,沒有一個指針和一個數組是不一樣的,一個字符串文字的大小信息'sizeof「ha」'是3. –

0

printf("%s","K\n"); - 此語句包含兩個字符串文字%sk\n。這兩個字符串文字將作爲只讀數據在文本分段中。現在考慮1000是字符串文字%s2000的地址是字符串字面k\n的地址。10002000將是兩個爭論,將被傳遞到printf

printf("%s","K\n"); 

這可以寫成下面的方式也

... 
char *a = "%s"; //Address 1000 is stored in a 
char *b = "k\n"; //Address 2000 is stored in b 
printf(a,b);  //Now we are passing 1000 and 2000 to printf 
... 

同時,我想告訴你的是,以下方法也可以打印一個字符串。

... 
char *a = "hello world" 
printf(a); //This will print hello world 
...