[英]C - is char* template a special type of string?
我碰到像
char* template = "<html><head><title>%i %s</title></head><body><h1>%i %s</h1> </body></html>";
同時閱讀代碼以實現Web服務器。
我很好奇,因為我之前從未見過這樣的字符串-模板是否指定了特殊的字符串類型(我只是在這里猜測,因為它在我的IDE中突出顯示了)? 另外, strlen()
如何與這樣的東西一起工作?
謝謝
char* template = "<html>...</html>";
根本上沒有什么不同
char *s = "hello";
名稱template
不是特別的,它只是一個普通的標識符,即變量的名稱。 ( template
恰巧是C ++中的關鍵字,但這是C。)
最好將其定義為const
,以強制執行字符串文字無法修改的事實,但這不是強制性的。
請注意, template
本身不是字符串。 它是一個指向字符串的指針 。 字符串本身(由語言定義為“由第一個空字符終止並包括第一個空字符的連續字符序列”)是從"<html>"
開始,以"</html>"
結束和隱式終止空字符的序列。
在回答第二個問題時, strlen(template)
可以很好地工作,給您字符串的長度(本例中為81)。
我想代碼的另一部分使用此字符串來格式化Web服務器用作頁面的輸出字符串。 strlen函數將返回字符串的長度。
除非在初始化程序中的某個位置有一個空字符或一個使用\\
字符的轉義序列(除非沒有),否則此字符串沒有什么特別的。 %
是字符串中的普通字符,不會接受特殊處理。 特別是strlen
函數會將%i
讀取為兩個字符,即%
和i
。 對於%s
同樣如此。
相反, \\
是字符串的特殊字符,表示轉義序列。 字符串常量中的\\
及其后面的字符在字符串本身中構成一個字符。 例如, \\n
表示換行符(ASCII 10), \\t
表示制表符(ASCII 8)。
該字符串很可能用作printf
的格式字符串。 此函數將讀取字符串並將%i
和%s
解釋為分別接受int
和char *
格式字符串。
char* template = "<html>...</html>";
只需創建一個用於存儲數據"<html>...</html>"
的char數組,並且此數組名稱為template
,則可以將該名稱更改為所需的其他名稱。創建char數組時,編譯器將\\0
添加到數組的末尾。 strlen
將計算從數組開始到\\0
的長度(不包括\\0
)。
我認為您的IDE會突出顯示此字符串是因為此字符串在其他地方使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.