首页经验c++字符与字符串 c和c++字符串区别

c++字符与字符串 c和c++字符串区别

圆圆2025-07-10 12:00:37次浏览条评论

在#$#@@$#$###$@_9e6df79f947a44c 8a2ba49c4428632a1中,字符串似乎定义了没有直接的关键字,与其他数据类型如整型、浮点型、字符类型、指针、指针和结构体不同,初学者可能难以立即理解其用法。然而,掌握c语言的字符串处理可以带来很多有趣的应用。之前,c定义字符串则更为重视,因为它有专门的关键字。让我们深入探讨c和c语言中字符串的表示和使用方法。

一、C中的字符串表示形式:

尽管有些网友可能还没有接触过C (C)是一门面向对象的语言,而C是一门面向过程的语言,所以对于那些未接触过面向对象编程的网友来说,可能不太习惯这种用法。然而,在这个快速发展的时代,掌握至少一门面向对象的语言是非常重要的,不要过度固步自封。以下是C中字符串的简单介绍,并不涉及类和对象的概念,仅与C语言进行对比)。

1、什么是字符串?

(1)字符串是一连串字符实际。在中,字符包括文字、符号和数字,用于表达信息。在编程中,字符字符类型变量表示。C和C语言都使用ASCII编码处理字符,编码后的字符可以用char类型变量表示。字符串就是多个字符组合在一起。

立即学习“C”免费学习笔记(深入)”;

(2)在内存中,字符串由多个连续的字节组成(阵列,字符串和字符阵列非常相似)。

(3)无论是C还是C语言,字符串有三个核心要点:第一,使用指针指向字符串的开头;字符串以'\0'结尾;第三,组成字符串的各个字符在内存中是连续存储的。

(4)'\0'是一个ASCII字符编码,值为0(真正的0,与数字0不同,数字0有自己的ASCII编码)。需要区分'\0'、'0'和0(0等于'\0','0'等于48)。

一文带你了解c++和c中字符串的使用

2、C 中的字符串表示:

在C 中,我们使用string关键字来定义字符串:string str=quot;linuxquot;;登录后复制

二、C语言里面的字符串怎么来使用呢?

C语言中字符串类型,可以通过字符指针定义字符串实现。让我们详细解析一下。

1、C语言里面定义字符串实现:

我们可以使用字符指针来没有字符串:char *p = quot;linuxquot;;登录后复制

此时,p被称为字符串,但实际上p只是一个指针指针(本质上是一个指针指针,p指向了字符串的起始地址)。

注意:在char *p = "linux";大概代码中,p是一个字符指针,占4字节;"linux"存储在代码段,占6个字节('\0');一共使用了10个字节,其中4字节的指针p称为字符串指针(指向字符串的起始地址,它本身不是字符串),5字节用于存储"linux"这5个字符的内存才是真正的字符串,最后1字节用于存储'\0',作为字符串的结束标志(但包括不属于字符串本身)。

一文带你了解c++和c中字符串的使用

2、字符串和字符仓库:

除了使用字符指针语言,我们还可以在C中使用一维仓储来存储字符串。

以下是具体的表示方式:

一文带你了解c++和c中字符串的使用

1、字符数组初始化与sizeof、strlen:

(1)sizeof是C的一个关键字和操作(使用时为sizeof(类型或变量名),语言中人误认为sizeof是函数,实际上不是)。sizeof可能返回一个类型或变量所占用的内存字节数。为什么需要sizeof是int、double等主要类型?在不同平台上占用的字节数不同;另外,C语言中除了ADT(抽象数据类型)外,还有UDT(用户定义类型),如在实时操作系统中,经常使用typedef重新定义数据基本类型的名称,主要考虑跨平台角色,因为不同平台上的基本数据类型大小不同,通过修改别名可以避免在换平台时进行大量修改。

(2)strlen是一个C语言库函数,其原型为:size_t strlen(常量字符*s);该函数接收一个字符串指针,返回字符串的长度(以字节为单位)。注意,strlen返回的长度不包括字符串结尾'\0'。为什么需要strlen?因为从字符串的定义(指针指向开头、固定结尾、中间依次连续)来看,无法直接得到字符串的长度,需要通过strlen函数来计算。

2、代码示例来演示sizeof和strlen:#include #include #include

int main(void){/ char p = "linux";printf("sizeof(p) = d.\n", sizeof(p)); // 8,光标在64位系统上占8个字节 printf("strlen(p) = d.\n", strlen(p)); // 5,不包括结尾的'\0'*//* char a[7] = "windows"; // a[0] = 'w', a[1] = 'i', ..., a[6] = 's' printf("sizeof(a) = d.\n", sizeof(a)); // 7printf("strlen(a) = d.\n", strlen(a)); // >=7,考虑到栈中可能堆积的数据*//* char a[] = "windows"; // a[0] = 'w', a[1] = 'i', ..., a[6] = 's', a[7] = '\0'printf("sizeof(a) = d.\n", sizeof(a)); // 8printf("strlen(a) = d.\n", strlen(a)); // 7*//* char a[5] = "windows";printf("sizeof(a) = d.\n", sizeof(a)); // 5printf("strlen(a) = d.\n", strlen(a)); // 5*//* char a[5] = "lin";printf("sizeof(a) = d.\n", sizeof(a)); // 5printf("strlen(a) = d.\n", strlen(a)); // 3*//* char a[5] = {2, 3};printf("sizeof(a) = d.\n", sizeof(a)); // 5printf("strlen(a) = d.\n", strlen(a)); // 2*//* char a[5] = {0};printf("sizeof(a) = d.\n", sizeof(a)); // 5printf("strlen(a) = d.\n", strlen(a)); // 0*//* char a[5];printf("sizeof(a) = d.\n", sizeof(a)); // 5printf("strlen(a) = d.\n", strlen(a)); // 5*//* char *p = quot;linuxquot;;// int len = strlen(p);int len = mystrlen(p);printf("len = d.\n", len);*/return 0;登录后复制

}

说明:

(1)上述代码没有显示输出结果,但在代码后有注释。未注释的部分分析方法相同,读者可以尝试自己分析原因。

(2)sizeof(阵列名)持续返回阵列的元素个数(即阵列大小),与阵列是否初始化、初始化多少无关;strlen用于计算字符串长度,只能提交合法的字符串,否则没有意义。

(3)定义阵列时,如果未明确指定阵列大小,必须提供初始化表达式,编译器会根据初始化表达式自动计算数组大小(定义数组时指定大小,或直接给出,或提供初始化表达式)。

3、字符数组与字符串的本质差异(从内存分配角度):

(1)对于字符数组a[] = "linux";,定义了一个数据库a,占6字节,右值"linux"仅在编译时存在,编译器用它初始化字符加载a后丢弃(内存中不存在"linux"这个字符串);这句话相当于a[] = {'l','i','n','u','x','\0'};。

(2)对于字符串char *p = quot;linuxquot;;,定义了一个字符指针p,p占4字节,分配在栈上;同时定义了一个字符串“linux”,分配在代码段;然后将代码段中字符串(占6字节)的首地址(即'l'的地址)赋值给p。

(3)总结对比:字符阵列和字符串有本质区别。字符阵列本身是一个阵列,带有自己的内存空间,可以存储数据(架构容器);而字符串本身是指针,只能占4字节,且这4字节不能存储有效数据,将有效数据存储在其他地方,然后将地址存储在p中。相反,字符数组字符存储本身;字符串需要额外的内存来存储字符,字符串本身只存储这些字符存储了解所在内存空间的首地址。

三、总结:

今天的分享就到这里了,晚安!

以上就是一文带你c和c中字符串的使用的内容,更多请关注乐哥常识网其他相关文章!

一文带你了解c++和
wordpress后端是什么 wordpress后台怎么清除缓存
相关内容
发表评论

游客 回复需填写必要信息