地址,我們怎麼可以寫這種類型的語法可我們通過格式說明串給printf
#include<stdio.h>
main()
{
char *str;
str="%s";
printf(str,"K\n");
return 0;
}
是printf
聲明是否有效?
地址,我們怎麼可以寫這種類型的語法可我們通過格式說明串給printf
#include<stdio.h>
main()
{
char *str;
str="%s";
printf(str,"K\n");
return 0;
}
是printf
聲明是否有效?
是的,它是有效的,因爲你的str
是char *
類型。這是printf函數原型:
int printf (const char * format, ...);
從調用函數的觀點,你的聲明將是相同的:
printf("%s","K\n");
隨着"%s"
和"K\n"
是類型char *
的常量表達式。
thankx我得到了點 –
你是說'printf'調用是無效的,因爲他沒有在main中指定返回類型? – xQuare
是的,語法是有效的。這一方案的結果是字符串「K \ n」
\ n表示換行符。
這%s告訴printf的,這將是在打印的第一個參數應打印爲字符串。
看到這個:http://www.cplusplus.com/reference/clibrary/cstdio/printf/
這是一個非常簡單的程序。在您提出這個問題的時候,您可以自己編譯並運行程序並看到答案。你通過做最好的學習。
的函數調用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";
不幸的是字符串文字的類型爲char [],不是(指針而不是'const')。你也錯過了'main'的無效規範。 –
@JensGustedt什麼?不是const?我一直認爲這是常量。 Btw不是無關緊要的,不管它是數組還是指針?它只是一維的,我不想爲字符串文字分配任何東西,所以實際上它可以用作指針。並且修改其內容**是**未定義的行爲,所以它必須是const ... – 2012-08-25 16:41:52
不,不是'const' :(而且它恰好是UB。如果類型是'const'限定,它將是一個違反約束並強制診斷,然後,沒有一個指針和一個數組是不一樣的,一個字符串文字的大小信息'sizeof「ha」'是3. –
printf("%s","K\n");
- 此語句包含兩個字符串文字%s
答k\n
。這兩個字符串文字將作爲只讀數據在文本分段中。現在考慮1000
是字符串文字%s
和2000
的地址是字符串字面k\n
的地址。1000
和2000
將是兩個爭論,將被傳遞到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
...
你真的應該讀一些關於C的書... – xQuare
停下來。關閉瀏覽器。拿起一份[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