簡體   English   中英

C-char *模板是字符串的一種特殊類型嗎?

[英]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解釋為分別接受intchar *格式字符串。

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

只需創建一個用於存儲數據"<html>...</html>"的char數組,並且此數組名稱為template ,則可以將該名稱更改為所需的其他名稱。創建char數組時,編譯器將\\0添加到數組的末尾。 strlen將計算從數組開始到\\0的長度(不包括\\0 )。


我認為您的IDE會突出顯示此字符串是因為此字符串在其他地方使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM