繁体   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