简单不先于复杂,而是在复杂之后。
目录
字符串
转义字符
\n
\0
\?
\'
\"
\\
\a
\t
\ddd
\xdd
注释
由双引号引起来的一串字符为字符串字面值,简称字符串。
char是字符类型,没有字符串类型。
但是字符串可以存储到字符数组中:
char arr[10] = "abcdef";
以上开辟了7个字符的空间
[ ]中可以不填,自动根据后面字符串内容开辟相应空间
字符串的结束标志是一个\0 转义字符,在计算字符串长度时 \0 只作结束标志,不作字符串内容
arr2 中字符只占用了空间的一部分,之后还有很多字符,\0 是字符串的结束标志,所以要在空间后直至遇到\0才终止。
strlen 是求字符串长度的一个库函数,string length,头文件string。
strlen是用来获取字符串的有效长度的,结尾标记'\0'不包含在内。
strlen获取的规则非常简单:从前往后依次检测,直到遇到'\0'是就终止检测。
字符数组不是一个有效的字符串,因为后面没有放置'\0',因此strlen在求解时,将有效字符检测完之后,还会继续向后检测,直到遇到'\0'是才终止,因此不确定之后的第一个'\0'在什么位置。
转义字符 |
释义 |
\? |
在书写连续多个问号时使用,防止他们被解析成三字母词 |
\' |
用于表示字符常量 |
\“ |
用于表示一个字符串内部的双引号 |
\\ |
用于表示一个反斜杠,防止它被解释为一个转义序列符。 |
\a |
警告字符,蜂鸣 |
\b |
退格符 |
\f |
进纸符 |
\n |
换行 |
\r |
回车 |
\t |
水平制表符 |
\v |
垂直制表符 |
\ddd |
ddd表示1~3个八进制的数字。 如: \130 X |
\xdd |
dd表示2个十六进制数字。 如: \x30 0 |
int main()
{
printf("abcn");
printf("abc\n")//换行符
return 0;
}
int main()
{
printf("abc0def")//打印abcdef
printf("abc\0def")//打印abc
return 0;
}
//三字母词
//??) - ]
//??( - [
int main()
{
printf("%s\n","(are you ok??)")
//打印结果(are you ok]
printf("%s\n","(are you ok\?\?)")
//打印结果(are you ok??)
//当前编译器不支持三字母词
return 0;
}
int main()
{
printf("%c\n",''');//报错
printf("%c\n",'\'');//表示字符常量'
return 0;
}
\"
int main()
{
printf("abcdef");//只有字符串能直接简化打印
printf("a");//字符串里可以只有一个字符
printf(""");//报错
printf("\"");表示一个字符串内部的双引号
return 0;
}
int main()
{
printf("abcd\0ef");//打印结果abcd
printf("abcd\\0ef");//打印结果abcd\0ef
//表示一个反斜杠,防止它被解释为一个转义序列符。
printf("c:\test\test.c");//打印结果c: est est.c
printf("c:\\test\\test.c");//打印结果c:\test\test.c
//路径打印用\\
return 0;
}
int main()
{
printf("\a\a\a\a\a\a\a");
//警告字符,蜂鸣
return 0;
}
int main()
{
printf("abcd\tef");
//Tab = \t
return 0;
}
int main()
{
printf("%c\n",'\130');//ddd表示1~3个八进制的数字
//打印结果X,为130这个八进制转化为十进制的数字作为ASCII码值所代表的字符
return 0;
}
字符\0 的 ASCII码值为0
字母大小写的 ASCII 码值相差32
int main()
{
printf("%c\n",'\x60');
return 0;
}
下面是打印数据的格式
//%d - 打印整形
//%c - 打印字符
//%s - 打印字符串
//%f - 打印float类型的数据
//%lf - 打印double类型的数据
//%zu - 打印sizeof的返回值