第30课 - C语言中的字符串
第30课 - C语言中的字符串
1. 字符串的概念
(1)字符串是有序字符的集合
(2)字符串是程序中的基本元素之一
(3)C语言中没有字符串的概念
- C语言中通过特殊的字符数组模拟字符串
- C语言中的字符串是以 '\0' 结尾的字符数组 // 回忆前面学过的转义符 \ ,'\0' 即八进制的0表示的字符,八进制的0在内存中就是0
2. 字符数组与字符串
(1)在C语言中,双引号引用的单个或多个字符是一种特殊的字面量
- 存储于程序的全局只读存储区
- 本质为字符数组,编译器自动在结尾加上 '\0' 字符
【字符数组与字符串】
1 #include <stdio.h> 2 3 int main() 4 { 5 char ca[] = {'H','e','l','l','o'}; 6 char sa[] = {'W','o','r','l','d','\0'}; 7 8 char ss[] = "Hello world!"; // 使用"Hello World!"这个字符数组去初始化ss数组,这种语法是允许的!!! 9 10 char* str = "Hello World!"; // 全局只读存储区,str[0]='h'是非法的 11 12 printf("%s\n", ca); // 打印Hello及其后面的内容,直到遇到 '\0' 13 printf("%s\n", sa); // World 14 printf("%s\n", ss); // Hello World! 15 printf("%s\n",str); // Hello World! 16 17 return 0; 18 }
3. 字符串字面量
(1)字符串字面量的本质是一个字符数组
(2)字符串字面量可以看作指针常量
(3)字符串字面量存储在程序的全局只读存储区,不可对其中的字符进行修改
(4)字符串字面量至少包含一个字符,即空字符串 "" 包含一个 '\n'
【字符串字面量的本质】
1 #include <stdio.h> 2 3 int main() 4 { 5 // 字符串字面量经过编译器编译,返回的是存储它的字符数组的地址,该字符数组村粗在程序的全局只读存储区 6 char b = "abc"[0]; 7 char c = *("123" + 1); 8 char t = *""; 9 10 printf("%c\n", b); // a 11 printf("%c\n", c); // 2 12 printf("%d\n", t); // 0 13 14 printf("%s\n", "Hello"); // Hello 15 printf("%p\n", "World"); // 0x400692,存储该字符串字面量的字符数组的地址 16 17 return 0; 18 }
4. 字符串的长度
(1)字符串的长度指的就是第一个 '\0' 字符前出现的字符的个数
(2)函数 strlen 用于返回字符串的长度
【strlen的使用】
1 #include <stdio.h> 2 #include <string.h> 3 4 int main() 5 { 6 char s[] = "Hello\0World"; // 以第一个出现的'\0'作为字符串的结束符 7 8 int i = 0; 9 for (i=0; i<sizeof(s)/sizeof(s[0]); i++) { 10 printf("%c\n", s[i]); 11 } 12 13 printf("%zu\n", strlen(s)); // 5 14 printf("%zu\n", strlen("123")); // 3 15 16 return 0; 17 } 18 19 /* 20 H 21 e 22 l 23 l 24 o 25 26 W 27 o 28 r 29 l 30 d 31 32 5 33 3 34 */