第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 */

 

posted @ 2019-11-13 23:01  Hengs  阅读(363)  评论(0编辑  收藏  举报