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

可见,有两种表示形式,那么这两种输出的结果是否相同,且看:
C语言中的字符串和转义字符
可见arr2的结果除了abc还另外出现了烫烫烫...相似于乱码的东西。缘由是,arr1中的"abc"---'a','b','c','\0',最后一个的\0是一个转义字符,是字符串的结束标志,其值是0,在计算字符串长度时\0是结束标志,不能算字符串内容,而arr2中则没有\0的表示。
修改一下代码,给arr2加上'\0':ide

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

输出结果彻底相同:
C语言中的字符串和转义字符
接下来打印一下arr2不加'\0'时的两者的长度,看是否相同:code

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

输出结果:
C语言中的字符串和转义字符
其中arr1的结果毋庸置疑,那么arr2的结果为何是15呢,缘由就是由于arr2没有定义'\0',使得arr2的长度是一个随机值 即arr2:a b c .......直到遇到\0。
若是再给arr2加上‘\0’:blog

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

输出结果:
C语言中的字符串和转义字符
长度也就彻底同样了。字符串

C语言中的转义字符

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

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

(Note:c语言中%d打印整型, %c打印字符,%s打印字符串, %f打印浮点型数字==小数,%p以地址的形式打印, %x打印十六进制数字,%lf打印双精度浮点数... )
结果以下:
C语言中的字符串和转义字符
可见,与咱们所须要的有很大的差异,缘由是‘\’使得‘\’+‘后面的字符’构成了一个转义字符,即\t---水平制表符,\32---八进制数字32,咱们再来看一下这串内容的长度:table

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

C语言中的字符串和转义字符
长度为13,原本应该是17的,但倒是13,缘由就是由于‘\’+‘后面的字符’构成的转义字符独占一位,即\t是一位,\32是一位,\t又是一位,如今再数一下,正好13位。
若是咱们想要完美的输出c:\test\32\test.c这串字符的话,就须要在‘\’的前面再加上一个‘\’,防止其和其后面的字符被解释为一个转义序列符,咱们修改一下代码:class

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

输出结果:
C语言中的字符串和转义字符
很完美,再看一下长度:test

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

输出结果:
C语言中的字符串和转义字符
彻底正确,因此,咱们在输出带有‘\’的字符串时,须要在‘\’前再加上一个‘\’来防止被误认为是一个转义字符而影响输出结果。
常见的转义字符:乱码

转义字符 意义
\a 警告字符
\b 退格符
\f 换页
\r 回车
\n 换行符
\t 水平制表符
\v 垂直制表符
\' 单引号
\" 双引号
\ 反斜杠
\ddd ddd表示1-3个八进制数字
\xdd dd表示2个十六进制数字
相关文章
相关标签/搜索