[英]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.