您的位置:首页 > 编程语言 > C语言/C++

C语言中的字符串和转义字符

2021-03-04 22:48 836 查看

C语言中的字符串

我们知道,c语言中的数据类型有short、int、long、char、float、double六种,但是没有字符串类型,如果我们要表达一串字符那么应该怎么做呢?
比如abc我们可以表示为"abc",字符串可以放入数组:

char arr1[] = "abc";
char arr2[] = { 'a','b','c' };
printf("arr1 = %s\n", arr1);
printf("arr2 = %s\n", arr2);

可见,有两种表示形式,那么这两种输出的结果是否相同,且看:

可见arr2的结果除了abc还另外出现了烫烫烫...类似于乱码的东西。原因是,arr1中的"abc"---'a','b','c','\0',最后一个的\0是一个转义字符,是字符串的结束标志,其值是0,在计算字符串长度时\0是结束标志,不能算字符串内容,而arr2中则没有\0的表示。
修改一下代码,给arr2加上'\0':

char arr1[] = "abc";
char arr2[] = { 'a','b','c','\0'};
printf("arr1 = %s\n", arr1);
printf("arr2 = %s\n", arr2);

输出结果完全相同:

接下来打印一下arr2不加'\0'时的二者的长度,看是否相同:

char arr1[] = "abc";
char arr2[] = { 'a','b','c'};
printf("%d\n", strlen(arr1));
printf("%d\n", strlen(arr2));

输出结果:

其中arr1的结果毋庸置疑,那么arr2的结果为什么是15呢,原因就是因为arr2没有定义'\0',使得arr2的长度是一个随机值 即arr2:a b c .......直到遇到\0。
如果再给arr2加上‘\0’:

char arr1[] = "abc";
char arr2[] = { 'a','b','c','\0'};
printf("%d\n", strlen(arr1));
printf("%d\n", strlen(arr2));

输出结果:

长度也就完全一样了。

C语言中的转义字符

有这么一个路径:c:\test\32\test.c,现在我们要让它在控制台显示出来,应该怎么做呢?
直接使用双引号括住:

printf("%s\n", "c:\test\32\test.c");

(Note:c语言中%d打印整型, %c打印字符,%s打印字符串, %f打印浮点型数字==小数,%p以地址的形式打印, %x打印十六进制数字,%lf打印双精度浮点数... )
结果如下:

可见,与我们所需要的有很大的差别,原因是‘\’使得‘\’+‘后面的字符’构成了一个转义字符,即\t---水平制表符,\32---八进制数字32,我们再来看一下这串内容的长度:

printf("%d\n", strlen("c:\test\32\test.c"));


长度为13,本来应该是17的,但却是13,原因就是因为‘\’+‘后面的字符’构成的转义字符独占一位,即\t是一位,\32是一位,\t又是一位,现在再数一下,正好13位。
如果我们想要完美的输出c:\test\32\test.c这串字符的话,就需要在‘\’的前面再加上一个‘\’,防止其和其后面的字符被解释为一个转义序列符,我们修改一下代码:

printf("%s\n", "c:\\test\\32\\test.c");

输出结果:

很完美,再看一下长度:

printf("%d\n", strlen("c:\\test\\32\\test.c"));

输出结果:

完全正确,所以,我们在输出带有‘\’的字符串时,需要在‘\’前再加上一个‘\’来防止被误认为是一个转义字符而影响输出结果。
常见的转义字符:

转义字符 意义
\a 警告字符
\b 退格符
\f 换页
\r 回车
\n 换行符
\t 水平制表符
\v 垂直制表符
\' 单引号
\" 双引号
\ 反斜杠
\ddd ddd表示1-3个八进制数字
\xdd dd表示2个十六进制数字
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: