我遇到过像
这样的行char* template = "<html><head><title>%i %s</title></head><body><h1>%i %s</h1> </body></html>";
在阅读代码以实现Web服务器时。
我很好奇,因为我之前从未见过这样的字符串 - 是指定特殊类型字符串的模板(我只是在这里猜测,因为它在我的IDE上突出显示)?另外,strlen()
如何使用这样的东西?
由于
答案 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
解释为格式字符串,分别接受int
和char *
。
答案 3 :(得分:0)
char* template = "<html>...</html>";
只需创建一个char数组来存储数据"<html>...</html>"
,并且此数组名称为template
,您可以将此名称更改为您想要的其他名称。当创建char数组时,编译器将添加{{1 }}到数组的末尾。\0
将计算从数组开始到strlen
的长度(\0
不包含)。
我认为你的IDE会突出显示这个字符串,因为这个字符串在其他地方使用。