C语言之字符串与字符数组的区别

简介: ​1.字符串的定义:(1)单个字符:char ch='i';//单个字符的定义(2)一维字符串数组:char arr[]="love";(这种方法定义的一维字符串数组必须赋值)char arr[4];(想内存申请创建可以存储3个字符的数组空间)char arr[5]=”love”;(开辟5个字节的空间存放字符love,最后一个字节存放'\0'字符)char arr[5]={'l','o',v','e'};(开辟5个字节的空间存放字符love,最后一个字节存放'\0'字符)2.字符串长度3.字符串和字符数组的区别:由于C语言中没有string关键字,所以不能定义字符串

 1.字符串的定义:

(1)单个字符:

char ch='i';//单个字符的定义

image.gif

(2)一维字符串数组:

char arr[]="love";(这种方法定义的一维字符串数组必须赋值)
char arr[4];(想内存申请创建可以存储3个字符的数组空间)
char arr[5]=”love”;(开辟5个字节的空间存放字符love,最后一个字节存放'\0'字符)
char arr[5]={'l','o',v','e'};(开辟5个字节的空间存放字符love,最后一个字节存放'\0'字符)

image.gif

2.字符串长度

(1)sizeof(arr)是求该字符串的有多少字符,由于\0也是一个字符,所以数组实际长度加一;

(2)strlen(arr)因为strlen碰见\0就会停止,所以结果是数组的实际长度

3.字符串和字符数组的区别

由于C语言中没有string关键字,所以不能定义字符串,只能用字符数组来表示字符串,也因此很多人认为两者是一个概念,笔者以前也是这样认为的,后来听到老师提过字符串和字符数组是有区别,因此我开始翻阅一些书籍,才了解了两者的区别,接下来请听我说:

(1)字符数组:

是定义一个字符数组,向内存申请的空间是数组里存放元素个数,向内存存放数组的字符元素

char arr1[] = { 'l','o','v','e' };

image.gif

(2)字符串:

是定义一个字符数组,向内存申请的空间是数组里存放元素个数+1,向内存存放数组的字符元素+'\0',编译时编译器会自动在字符串的末尾添加此值,字符串是一个只读型字符型数组,不能够通过指针更改字符串内部数据

char arr2[] = "love";

image.gif

可以简单的这么说:c语言的字符串由C的字符数组末尾加上'\0'变形而成。

#include<stdio.h>
int main(void)
{
  char arr1[] = { 'l','o','v','e' };
  char arr2[] = "love";
  printf("arr1的长度 :%zu\n", sizeof(arr1));
  printf("arr2的长度 :%zu\n", sizeof(arr2));
  printf("arr1的长度 :%d\n", strlen(arr1));
  printf("arr2的长度 :%d\n", strlen(arr2));
  printf("arr1的内容 :%s\n",arr1);
  printf("arr2的长度 :%s\n", arr2);
  return 0;
}

image.gif

image.gif编辑

注:第三行出现:arr1的长度 :36和第五行出现:arr1的内容 :love烫烫烫烫烫烫烫烫烫烫烫烫烫烫love的原因是strlen和printf函数均是遇到'\0'才停住,由于定义字符数组时没有加上'\0'导致'\0'位置未知,故出现此种情况,用我以前的一篇博客(初识C语言(1))做的图供大家理解:

image.gif编辑


目录
相关文章
|
15天前
|
程序员 C语言 开发者
pymalloc 和系统的 malloc 有什么区别
pymalloc 和系统的 malloc 有什么区别
|
11天前
|
程序员 C语言 开发者
pymalloc 和系统的 malloc 有什么区别?
pymalloc 和系统的 malloc 有什么区别?
|
29天前
|
存储 C语言
C语言:普通局部变量、普通全局变量、静态局部变量、静态全局变量的区别
C语言中,普通局部变量在函数内部定义,作用域仅限于该函数;普通全局变量在所有函数外部定义,作用域为整个文件;静态局部变量在函数内部定义但生命周期为整个程序运行期;静态全局变量在所有函数外部定义,但仅在定义它的文件内可见。
43 10
|
27天前
|
存储 编译器 C语言
【c语言】数组
本文介绍了数组的基本概念及一维和二维数组的创建、初始化、使用方法及其在内存中的存储形式。一维数组通过下标访问元素,支持初始化和动态输入输出。二维数组则通过行和列的下标访问元素,同样支持初始化和动态输入输出。此外,还简要介绍了C99标准中的变长数组,允许在运行时根据变量创建数组,但不能初始化。
35 6
|
27天前
|
存储 C语言
C语言:结构体与共用体的区别
C语言中,结构体(struct)和共用体(union)都用于组合不同类型的数据,但使用方式不同。结构体为每个成员分配独立的内存空间,而共用体的所有成员共享同一段内存,节省空间但需谨慎使用。
|
1月前
|
存储 编译器 C语言
C语言函数的定义与函数的声明的区别
C语言中,函数的定义包含函数的实现,即具体执行的代码块;而函数的声明仅描述函数的名称、返回类型和参数列表,用于告知编译器函数的存在,但不包含实现细节。声明通常放在头文件中,定义则在源文件中。
|
30天前
|
存储 算法 C语言
C语言:什么是指针数组,它有什么用
指针数组是C语言中一种特殊的数据结构,每个元素都是一个指针。它用于存储多个内存地址,方便对多个变量或数组进行操作,常用于字符串处理、动态内存分配等场景。
|
1月前
|
存储 人工智能 BI
C语言:数组的分类
C语言中的数组分为一维数组、多维数组和字符串数组。一维数组是最基本的形式,用于存储一系列相同类型的元素;多维数组则可以看作是一维数组的数组,常用于矩阵运算等场景;字符串数组则是以字符为元素的一维数组,专门用于处理文本数据。
|
1月前
|
存储 C语言
C语言指针与指针变量的区别指针
指针是C语言中的重要概念,用于存储内存地址。指针变量是一种特殊的变量,用于存放其他变量的内存地址,通过指针可以间接访问和修改该变量的值。指针与指针变量的主要区别在于:指针是一个泛指的概念,而指针变量是具体的实现形式。
|
1月前
|
存储 编译器 C语言
C语言:数组名作为类型、作为地址、对数组名取地址的区别
在C语言中,数组名可以作为类型、地址和取地址使用。数组名本身代表数组的首地址,作为地址时可以直接使用;作为类型时,用于声明指针或函数参数;取地址时,使用取地址符 (&),得到的是整个数组的地址,类型为指向该类型的指针。