2016-07-24 92 views
1

我通過管道來了,如同C是char *模板的一種特殊類型的字符串?

char* template = "<html><head><title>%i %s</title></head><body><h1>%i %s</h1>  </body></html>"; 

,同時通過讀碼來實現Web服務器。

我很好奇,因爲我從來沒有見過像這樣的字符串 - 模板指定一種特殊類型的字符串(我只是在這裏猜測,因爲它在我的IDE上突出顯示)?另外,如何strlen()這樣的工作?

感謝

+0

這似乎是正常的字符串。將字符串解釋爲模板將是代碼的其他部分的任務,'strlen()'將正常工作。 – MikeCAT

+0

因此,%i和%s計算爲每個使用strlen()的2個字符? – Bobbybobbobbo

+1

'template'不過是變量的名字。 (這是C++中的一個關鍵字,而不是C) –

回答

1

除非在初始值設定項中存在空字符或使用\字符的轉義序列,否則沒有關於此字符串的任何特殊字符。 A %是一個字符串中的正常字符,不會受到特殊處理。功能strlen特別是將%i看作兩個字符,即%i。同樣爲%s

相反,\是字符串的特殊字符,表示轉義序列。 \和字符串常量後面的字符構成字符串本身中的單個字符。例如,\n表示換行符(ASCII 10),\t是製表符(ASCII 8)。

該字符串最有可能用作printf的格式字符串。該函數將讀取字符串並將%i%s解釋爲分別接受intchar *的格式字符串。

2

我想,有一個使用此字符串格式化用作Web服務器頁面輸出字符串代碼的另一部分。 strlen函數將返回字符串的長度。

4
char* template = "<html>...</html>"; 

根本沒有什麼不同

char *s = "hello"; 

名稱template是不是特別的,它只是一個普通的標識符,變量的名稱。 (template恰好是C++中的關鍵字,但是這是C.)

將它定義爲const以強制實現字符串文字不能被修改,但它不是強制性的這一事實。

請注意,template本身不是一個字符串。這是一個指針到一個字符串。字符串本身(由語言定義爲「由第一個空字符結尾且包括第一個空字符的連續字符序列」)是從"<html>"開始並以"</html>"開始並隱含終止空字符的序列。

而在回答第二個問題時,strlen(template)可以正常工作,給出字符串的長度(本例中爲81)。

0
char* template = "<html>...</html>"; 

只需創建一個字符數組存儲數據"<html>...</html>",而這個數組名是template,您可以將此名稱更改爲你希望其他名稱。當創建char數組時,編譯器會將\0添加到數組的末尾。 strlen將計算從陣列開始到\0(不包括\0)的長度。


我想你的IDE會突出顯示這個字符串是因爲這個字符串在其他地方使用。