第30课 C语言中的字符串
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第30课 C语言中的字符串相关的知识,希望对你有一定的参考价值。
1. 字符串的概念
(1)字符串是有序字符的集合
(2)字符串是程序中的基本元素之一
(3)C语言中没有字符串的概念,而是通过特殊的字符数组模拟字符串,是以‘\0‘结尾的字符数组。
2. 字符数组与字符串
(1)在C语言中,字双引号引用的单个或多个字符是一种特殊的字面量,被存储于程序的全局只读存储区,在本质上为字符数组,编译器自动在结尾加上‘\0‘字符。
【实例分析】字符数组与字符串
#include <stdio.h> int main(){ char ca[] = {‘H‘,‘e‘,‘l‘,‘l‘,‘0‘}; //栈,字符数组,注意没有\0 char sa[] = {‘W‘,‘o‘,‘r‘,‘l‘,‘d‘,‘\0‘}; //栈 char ss[] = "Hello world!";//栈。从语义上看,要用"Hello World!"这个 //字符数组去初始化ss数组,编译器会直接 //用这个字符数组的每个元素,去初始化栈上 //ss数组中的元素。作为优化,"Hello World!" //这个字符串就可以不必保存在全局只读区, //而只出现在栈上。因此ss[0] = ‘h‘ //这个的语句是合法的。 char* str = "Hello World!"; //全局只读存储区,str[0]=‘h‘是非法的 printf("%s\n", ca); //输出Hello及后面的内容,直到在内存中遇到\0 printf("%s\n", sa); //输出Hello World! printf("%s\n", ss); //输出Hello World! printf("%s\n",str); //输出Hello World! ss[0] = ‘h‘; //栈,合法 printf("%s\n", ss); //输出Hello World! //str[0] = ‘h‘; //全局只读存储区,非法 printf("%s\n", str); //输出Hello World! return 0; }
3. 鲜为人知的小秘密
(1)字符串字面量的本质是一个数组,如“Hello World!”是一个无名的字符数组
(2)字符串字面量可以看作常量指针
(3)字符串字面量中的字符不可改变
(4)字符串字面量至少包含一个字符,即‘\0‘
【实例分析】字符串字面量的本质
#include <stdio.h> int main(){ //本质上字符串字面量是一个字符数组,形如"Hello World!"是一个 //无名的字符数组。 char b = "abc"[0]; //合法,指向字符数组的第0个元素,即a char c = *("123" + 1);//合法,取出字符数组第2个元素,即2 char t = *""; //字符串字面量至少包少一个\0,即t=‘\0‘ printf("%c\n", b); //‘a‘ printf("%c\n", c); //‘2‘ printf("%d\n", t); //0 printf("%s\n","Hello"); printf("%p\n","World"); //输出字符串字面量的地址(全局区中) return 0; }
4. 字符串的长度
(1)字符串的长度就是字符串所包含字符的个数
(2)字符串长度指的是第一个‘\0‘字符前出现的字符个数,通过‘\0‘结束符来确定字符串的长度。
(3)函数strlen用于返回字符串的长度(不含‘\0‘)。
【编程实验】strlen的使用
5. 小结
(1)C语言中通过字符数组模拟字符串
(2)C语言中的字符串使用‘\0‘作为结束符
(3)字符串字面量的本质为字符数组
(4)字符串相关函数都依赖于结束符‘\0‘。
以上是关于第30课 C语言中的字符串的主要内容,如果未能解决你的问题,请参考以下文章