C - char *模板是一种特殊类型的字符串吗?

时间:2016-07-24 02:16:06

标签: c string

我遇到过像

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

在阅读代码以实现Web服务器时。

我很好奇,因为我之前从未见过这样的字符串 - 是指定特殊类型字符串的模板(我只是在这里猜测,因为它在我的IDE上突出显示)?另外,strlen()如何使用这样的东西?

由于

4 个答案:

答案 0 :(得分:4)

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

基本没什么不同
char *s = "hello";

名称template并不特殊,它只是一个普通的标识符,即变量的名称。 (template恰好是C ++中的关键字,但这是C。)

最好将其定义为const,以强制执行字符串文字无法修改的事实,但这不是强制性的。

请注意template本身不是字符串。它是字符串的指针。字符串本身(由语言定义为“由第一个空格终止并包括第一个空格的连续字符序列 character“)是以"<html>"开头并以"</html>"结尾的序列和隐式终止空字符。

在回答你的第二个问题时,strlen(template)会正常工作,给你字符串的长度(在这种情况下为81)。

答案 1 :(得分:2)

我认为代码的另一部分使用此字符串来格式化Web服务器用作页面的输出字符串。 strlen函数将返回字符串的长度。

答案 2 :(得分:1)

除非初始化程序中的某个空字符或使用\字符的转义序列中存在空字符,否则该字符串没有什么特别之处。 %是字符串中的普通字符,不接受特殊处理。特别是strlen函数会将%i读为两个字符,即%i。同样适用于%s

相反,\是字符串的特殊字符,表示转义序列。 \及其后面的字符常量中的字符构成字符串本身中的单个字符。例如,\n表示换行符(ASCII 10),\t表示制表符(ASCII 8)。

此字符串很可能用作printf的格式字符串。此函数将读取字符串并将%i%s解释为格式字符串,分别接受intchar *

答案 3 :(得分:0)

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

只需创建一个char数组来存储数据"<html>...</html>",并且此数组名称为template,您可以将此名称更改为您想要的其他名称。当创建char数组时,编译器将添加{{1 }}到数组的末尾。\0将计算从数组开始到strlen的长度(\0不包含)。

我认为你的IDE会突出显示这个字符串,因为这个字符串在其他地方使用。