1、字符串的概念
字符串是有序字符的集合
字符串是程序中的基本元素之一
C语言中没有字符串的概念
- C语言中通过特殊的字符数组模拟字符串
- C语言中的字符串是以 \'\0\' 结尾的字符数组
2、字符数组与字符串
在C语言中,双引号引用的单个或多个字符是一种特殊的字面量
-存储于程序的全局只读存储区
-本质为字符数组,编译器自动在结尾加上\'\0\'字符
下面那些是字符串的定义?
1 char ca[] = {\'H\', \'e\', \'l\', \'l\', \'o\'}; //普通字符数组 2 char sa[] = {\'W\', \'o\', \'r\', \'l\', \'d\', \'\0\'}; //存储于全局只读存储区的\0结尾的字符数组 - 字符串 3 char ss[] = "Hello world!"; //存储于全局只读存储区的\0结尾的字符数组 - 字符串 4 char* str = "Hello world!"; //存储于全局只读存储区的\0结尾的字符数组 - 字符串
对于ca的打印会出现不期望的内容(没有\0以字符串打印,一直往后打印)
4、鲜为人知的小秘密
你知道吗?
-字符串字面量的本质是—个数组
-字符串字面量可以看作指针常量
-字符串字面量中的字符不可改变
-字符串字面量至少包含—个字符(\0)
5、字符串字面量
"Hello World ! "是—个无名的字符数组
下面的表达式正确吗?
1 char b = "abc"[0]; 2 char c = *("123" + 1); 3 char t = *"";
6、实例分析
字符串字面量的本质 30-2.c
1 #include <stdio.h> 2 3 int main() 4 { 5 char b = "abc"[0]; 6 char c = *("123" + 1); 7 char t = *""; 8 9 printf("%c\n", b); 10 printf("%c\n", c); 11 printf("%d\n", t); //\0对应的ascii为0 12 13 printf("%s\n", "Hello"); 14 printf("%p\n", "World"); 15 16 return 0; 17 }
7、字符串的长度
字符串的长度就是字符串所包含字符的个数
字符串长度指的是第—个\'\0\'字符前出现的字符个数
通过\'\0\'结束符来确定字符串的长度
函数strlen用于返回字符串的长度
8、编程实验
strlen的使用 30-3.c
1 #include <stdio.h> 2 #include <string.h> 3 4 int main() 5 { 6 char s[] = "Hello\0world"; //sizeof(s) = 11 需要加上最后编译器加上的\0 7 int i = 0; 8 9 for(i=0; i<sizeof(s)/sizeof(char); i++) 10 { 11 printf("%c\n", s[i]); //h e l l o \0 w o r l d \0 12 } 13 14 printf("%s\n", s); //Hello 15 16 printf( "%d\n", strlen(s) ); //5 17 printf( "%d\n", strlen("123") ); //3 18 19 20 return 0; 21 }
9、小结
C语言中通过字符数组模拟字符串
C语言中的字符串使用\'\0\'作为结束符
字符串字面量的本质为字符数组
字符串相关函数都依赖于结束符\'\0\'