C语言-字符串
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'