我通過管道來了,如同C是char *模板的一種特殊類型的字符串?
char* template = "<html><head><title>%i %s</title></head><body><h1>%i %s</h1> </body></html>";
,同時通過讀碼來實現Web服務器。
我很好奇,因爲我從來沒有見過像這樣的字符串 - 模板指定一種特殊類型的字符串(我只是在這裏猜測,因爲它在我的IDE上突出顯示)?另外,如何strlen()
這樣的工作?
感謝
我通過管道來了,如同C是char *模板的一種特殊類型的字符串?
char* template = "<html><head><title>%i %s</title></head><body><h1>%i %s</h1> </body></html>";
,同時通過讀碼來實現Web服務器。
我很好奇,因爲我從來沒有見過像這樣的字符串 - 模板指定一種特殊類型的字符串(我只是在這裏猜測,因爲它在我的IDE上突出顯示)?另外,如何strlen()
這樣的工作?
感謝
除非在初始值設定項中存在空字符或使用\
字符的轉義序列,否則沒有關於此字符串的任何特殊字符。 A %
是一個字符串中的正常字符,不會受到特殊處理。功能strlen
特別是將%i
看作兩個字符,即%
和i
。同樣爲%s
。
相反,\
是字符串的特殊字符,表示轉義序列。 \
和字符串常量後面的字符構成字符串本身中的單個字符。例如,\n
表示換行符(ASCII 10),\t
是製表符(ASCII 8)。
該字符串最有可能用作printf
的格式字符串。該函數將讀取字符串並將%i
和%s
解釋爲分別接受int
和char *
的格式字符串。
我想,有一個使用此字符串格式化用作Web服務器頁面輸出字符串代碼的另一部分。 strlen函數將返回字符串的長度。
char* template = "<html>...</html>";
根本沒有什麼不同
char *s = "hello";
名稱template
是不是特別的,它只是一個普通的標識符,變量的名稱。 (template
恰好是C++中的關鍵字,但是這是C.)
將它定義爲const
以強制實現字符串文字不能被修改,但它不是強制性的這一事實。
請注意,template
本身不是一個字符串。這是一個指針到一個字符串。字符串本身(由語言定義爲「由第一個空字符結尾且包括第一個空字符的連續字符序列」)是從"<html>"
開始並以"</html>"
開始並隱含終止空字符的序列。
而在回答第二個問題時,strlen(template)
可以正常工作,給出字符串的長度(本例中爲81)。
char* template = "<html>...</html>";
只需創建一個字符數組存儲數據"<html>...</html>"
,而這個數組名是template
,您可以將此名稱更改爲你希望其他名稱。當創建char數組時,編譯器會將\0
添加到數組的末尾。 strlen
將計算從陣列開始到\0
(不包括\0
)的長度。
我想你的IDE會突出顯示這個字符串是因爲這個字符串在其他地方使用。
這似乎是正常的字符串。將字符串解釋爲模板將是代碼的其他部分的任務,'strlen()'將正常工作。 – MikeCAT
因此,%i和%s計算爲每個使用strlen()的2個字符? – Bobbybobbobbo
'template'不過是變量的名字。 (這是C++中的一個關鍵字,而不是C) –