用双引号(Double Quote)引起来的一串字符串字面值(String Literal),或者简称字符串。
例如:"boy"
"123"
"abc123"
"51CTO"
"51CTO博客"
字符串默认在结尾的位置隐藏了一个\0
的字符,\0
占用一个字符的位置,但并不会算在字符串的长度里。(比如:char arr[5]存储字符串的话,字符串中最多可以存放4个字符,需要留一个字符位置存放\0
)
int main(){
char test[20] = "admin123";
printf("%s\n",test);
printf("%d\n",strlen(test));
return 0;
}
上面使用了string.h中提供的strlen函数来计算字符串的长度。
【注意】字符串的结束标志是一个\0
的转义字符。在计算字符串长度的时候\0
是结束标志,不算作字符串内容。
int main(){
char test[20] = "admin\0admin";
printf("%s\n",test);
printf("%d\n",strlen(test));
return 0;
}
通过图片可以看出,在字符串中遇到\0
就会结束字符串。输出\0
之前的字符串,输出\0
之前字符串的长度。
当然,在字符串中包含\0的情况下,也可能不是结束的含义。例如:八进制。(转义字符八进制最多三位,包含0开头。转义字符的情况下可以不使用0开头)
上图中,\052
被看成了一个字符,即输出的*
字符。(具体参考ASCII码表)
不使用\0
开头的八进制。
上图中,\152
被看成了一个字符,即输出的j
字符。
如果遇到\18
这种情况,只需要将\1
看作八进制,8作为一个字符计算和输出。
在字符串中表示八进制转义字符最少需要一位数字,最多三位数字。
举例:
\1
\2
\01
\001
\101
\512
十六进制转义字符在字符串中最少需要一个数字,最多需要两位数字,且以\x
开头。(十六进制的数字为:0~9,a,b,c,d,e,f)即表现形式可以为:
\x1
\x01
\x10
\xab
\xa1
\x1a
当然,如果是自己写不推荐\x1
这种写法,可以试着写成\x01
,效果一样。