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

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);

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

b8357ada6a7ea3a33a007da3986e7083.png

可见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);

输出结果完全相同:

bd00dd5c96aaf747e99362ac57c11e59.png

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

char arr1[] = "abc";

char arr2[] = { 'a','b','c'};

printf("%d\n", strlen(arr1));

printf("%d\n", strlen(arr2));

输出结果:

d5beab952d0c9a065e18c56055b07725.png

其中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));

输出结果:

53e55a9f4e9a77afe25bc3672749f280.png

长度也就完全一样了。

C语言中的转义字符

有这么一个路径:c:\test\32\test.c,现在我们要让它在控制台显示出来,应该怎么做呢?

直接使用双引号括住:

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

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

结果如下:

f53e7c98d57f29f66a2f320a5255c2c6.png

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

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

b4eb22b2e21da364f90774ea454a341f.png

长度为13,本来应该是17的,但却是13,原因就是因为‘\’+‘后面的字符’构成的转义字符独占一位,即\t是一位,\32是一位,\t又是一位,现在再数一下,正好13位。

如果我们想要完美的输出c:\test\32\test.c这串字符的话,就需要在‘\’的前面再加上一个‘\’,防止其和其后面的字符被解释为一个转义序列符,我们修改一下代码:

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

输出结果:

57f447586d586ed70f93ab12dfa454f6.png

很完美,再看一下长度:

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

输出结果:

b3b9a1112a0ead523c8f1392de7110b7.png

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

常见的转义字符:

转义字符

意义

\a

警告字符

\b

退格符

\f

换页

\r

回车

\n

换行符

\t

水平制表符

\v

垂直制表符

\'

单引号

\"

双引号

\

反斜杠

\ddd

ddd表示1-3个八进制数字

\xdd

dd表示2个十六进制数字

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值