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'

posted @ 2018-12-16 21:04  lemaden  阅读(442)  评论(0编辑  收藏  举报