第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语言中的字符串的主要内容,如果未能解决你的问题,请参考以下文章

第7课 - 程序中的数据输入

python数据类型——列表元组字典集合

C语言数组

第36课 经典问题(下)----关于string的疑问

c/c++零基础坐牢第十天

第14课 单引号和双引号