字符串
"Nagato Yuki.\n"
概念:这种由双引号(Double Quote)引起来的一串字符成为字符串字面值(String Literal),简称为字符串。
注意:字符串的结束标志是一个'\0'
的转义字符。(在计算字符串长度时'\0'
是结束标志,不算做字符串内容。)
#include <stdio.h>
int main()
{
char arr1[] = "Yuki";
char arr2[] = { 'Y', 'u', 'k', 'i', '\0' }; //字符串数组中的字符'\0'很重要
printf("%s\n", arr1);
printf("%s\n", arr2);
return 0;
}
若不考虑字符'\0'
的输出后果
#include <stdio.h>
int main()
{
//输出字符串不考虑字符 '\0'
char arr[] = { 'Y', 'u', 'k', 'i' };
printf("%s\n", arr);
return 0;
}
输出结果:
分析:之所以会出现乱码,是因为输出字符串时输出完字符串“Yuki”
时没有检测到结束字符'\0'
,因此输出不会停止,直到在缓存中找到字符'\0'
时停止,在此期间缓存中的一些乱码字符也会输出。因此涉及字符串的问题时一定要注意结束字符'\0'
。
转义字符
'\n', '\t', '\\'.
概念:所有的ASCII码都可以用'\ddd'
或'\xhh'
(其中ddd是1 ~ 3位的8进制数, hh是1 ~ 2位的16进制数)来表示,但是C语言规定了语法'\特定字母'
来表示一些常见的不能显现的字符(如:换行键Enter、制表键Tab 等字符)
应用:
#include <stdio.h>
int main()
{
//打印一个单引号'
printf("%c\n", '\'');
//打印一个双引号"
printf("%c\n", '\"');
printf("%s\n", "\"");
//打印目录"c:\code\test.c"
printf("c:\\code\\test.c\n");
//打印目录"c:\test\628\test.c"
printf("c:\\test\\628\\test.c\n");
return 0;
}
注意:大部分转义字符是只算一个字符长度的(字符串结束标志转义字符'\0'
是不算入字符串长度的)。
e.g:计算字符串"c:\test\628\test.c"
的长度
#include <stdio.h>
#include <string.h>
int main()
{
int lenth;
lenth = strlen("c:\test\628\test.c");
printf("%d\n", lenth);
return 0;
}
结果:"c:\test\628\test.c"
长度位14位,因为转义字符\t
和转义字符\62
是只算入一个字符长度的。