C语言字符串那些事儿
2017-07-18 11:21
176 查看
1. 字符串基础知识
1.1 什么是字符串
字符串就是一串零个或多个字符,并且以一个位模式为全0的NUL字节结尾。其中NUL是人为定义用作字符串结尾的标志,所以字符串的长度不包括NUL字节。NUL字节其实就是ASCII码为0的数。
例:
char *line = "world0";
则在gdb调试发现:
(gdb)x/7d line 0x8048470 119 111 114 108 100 48 0
分别对应”world90”的ASIC码,而最后的一个0表示字符串的结尾。
1.2 字符与字符串
C语言字符串常量用一对双撇号(”“)括起来,而字符常量用一对单撇号(”)括起来,如下面的例子所示:char ch = ' a ' char *str = " a ";
‘a’是一个字符常量,而“a”确是一个字符串常量,只不过这个字符串的长度是1,即只有一个字符。字符串常量和字符常量的不同在于系统给字符串常量的结尾加上一个字符串结束标志’\0’, ‘\0’可以理解成0b00000000。
不能将一个字符串常量给字符变量。
char ch = "a"; //错误,GNU下会产生warning
1.3 字符串变量
C语言中没有专门的字符串变量,字符串用一维字符数组表示。数组名是字符数组地址,字符元素连续存储。如:
char arr[5]; /*充当字符串变量的角色*/ arr[5] = = "hello";
则数组中存储的数据如下:
数组名 | 0 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|---|
arr | h | e | l | l | o | \0 |
char *str; /*充当字符串变量的角色*/ srt = = "hello";
gdb调试结果如下:
(gdb)x/6c 0x80484470: 104 'h' 101 'e' 108 'l' 108 'l' 110 '0' 0 '\000'
1.3 字符串的初始化
1.3.1 一般初始化
char CharArray[6]={'h','e','l','l','o','\0'}; char CharArray[5]={'h','e','l','l','o'}; //字符数组并不要求它的最后一个字符为'\0',甚至可以不包含'\0',向这种是完全合法的。但与上面的字符数组的长度不同, char *p1 = {"Hello"}; char *p1 = "Hello"; //也可以省略大括号
1.3.1 重点解释两种初始化方法
char *p1 = "Hello";//字符指针 char p2[] = "Another Hello"; //字符数组,值得注意的是当数组大小省略时,系统自动计算大小。但注意其大小包含结尾的'\0'
对于个字符指针的初始化方式,是直接将常量区中字符串对应的地址赋值给p1,所以这个地址其实就是常量区中Hello对应的地址,所以用如*p1 =’h’这种操作是不行的,因为p1指向的是常量区的内存,常量区的内存是不允许修改的,在编译期间就已经确定了。
对于个字符数组的初始化方式,将常量区中对应的字符串,以4个字节为单位,一个一个复制到栈内存中,最后局部指针p2指向这片内存。所以*p2 =‘h’,这个操作是允许的,因为这修改的是栈内存中的内容。
另外要注意的是:
char arr[10]; arr[] = "hello";
这种写法是错误的,因为C语言并没有提供可以直接操作字符串的运算符;“=”可以用于其他数据类型的赋值,但是不可以直接给字符串赋值。
2. 字符串常用库函数
待更新参考
C语言字符串指针(指向字符串的指针)C语言中字符数组的初始化与赋值
《C和指针》
相关文章推荐
- c语言中关于字符串的那些事儿(字符数组和字符指针)
- C语言字符串的那些事儿
- C语言“字符串-数字”之间的转换
- c语言字符串函数详解
- 【C语言学习】《C Primer Plus》第11章 字符串和字符串函数
- C语言--求字符串长度的三种解法
- C语言字符串处理函数源码
- C语言字符串操作总结大全(超详细)
- C语言实现字符串拷贝函数的几种方法
- C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文
- c语言,strcmp(),字符串比较,看Asic 码,str1>str2,返回值 > 0;两串相等,返回
- C语言字符串转换小结
- C语言分割字符串(冒号)
- c语言宏定义的连接符##和#转字符串
- 字符串读入问题 (C语言)
- 关于“c语言从键盘输入字符串到指针数组”的问题
- C语言实现字符串截取函数left、mid和right
- (转)C语言学习札记(5)-- 字符和字符串
- c语言:求字符串的字节数,strlen
- 字符串处理函数gets()、puts()、strcmp()、strlen()、strcpy()、strcat()-C语言