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编辑


目录
相关文章
|
2月前
|
安全 C语言
C语言中的字符、字符串及内存操作函数详细讲解
通过这些函数的正确使用,可以有效管理字符串和内存操作,它们是C语言编程中不可或缺的工具。
232 15
|
7月前
|
存储 人工智能 程序员
一文彻底搞明白C语言的数组
本文详细介绍了C语言中的数组,包括定义、初始化(静态与动态)、存储方式、访问方法及常用操作,如遍历、修改元素和作为函数参数传递。数组是C语言中最基本的数据结构之一,掌握它对编程至关重要。下篇将介绍二维数组,敬请期待!
299 0
一文彻底搞明白C语言的数组
|
9月前
|
存储 算法 C语言
【C语言】字符常量详解
字符常量是C语言中处理字符数据的重要工具。通过单引号括起一个字符,我们可以方便地使用字符常量进行字符判断、字符运算和字符串处理等操作。理解字符常量的表示方法、使用场景和ASCII码对应关系,对于编写高效的C语言程序至关重要。
652 11
|
9月前
|
存储 C语言 开发者
【C语言】字符串操作函数详解
这些字符串操作函数在C语言中提供了强大的功能,帮助开发者有效地处理字符串数据。通过对每个函数的详细讲解、示例代码和表格说明,可以更好地理解如何使用这些函数进行各种字符串操作。如果在实际编程中遇到特定的字符串处理需求,可以参考这些函数和示例,灵活运用。
339 10
|
9月前
|
存储 C语言 开发者
【C语言】格式化输出占位符及其标志字符详解(基于ISO/IEC 9899:2024)
在C语言中,格式化输出通过 `printf` 函数等格式化输出函数来实现。格式说明符(占位符)定义了数据的输出方式,标准ISO/IEC 9899:2024(C23)对这些格式说明符进行了详细规定。本文将详细讲解格式说明符的组成部分,包括标志字符、宽度、精度、长度修饰符和类型字符,并适当增加表格说明。
435 6
|
9月前
|
传感器 算法 安全
【C语言】两个数组比较详解
比较两个数组在C语言中有多种实现方法,选择合适的方法取决于具体的应用场景和性能要求。从逐元素比较到使用`memcmp`函数,再到指针优化,每种方法都有其优点和适用范围。在嵌入式系统中,考虑性能和资源限制尤为重要。通过合理选择和优化,可以有效提高程序的运行效率和可靠性。
627 6
|
10月前
|
存储 程序员 编译器
C 语言数组与指针的深度剖析与应用
在C语言中,数组与指针是核心概念,二者既独立又紧密相连。数组是在连续内存中存储相同类型数据的结构,而指针则存储内存地址,二者结合可在数据处理、函数传参等方面发挥巨大作用。掌握它们的特性和关系,对于优化程序性能、灵活处理数据结构至关重要。
|
算法 编译器 程序员
C语言学习笔记—P11(数组<2>+图解+题例+三子棋游戏<初级>)
C语言学习笔记(数组<2>+图解+题例+三子棋游戏<初级>)
186 0
C语言学习笔记—P11(数组<2>+图解+题例+三子棋游戏<初级>)
|
存储 C语言
C语言学习笔记—P10(数组<1>+图解+题例)
C语言学习笔记(数组<1>+图解+题例)
264 0
C语言学习笔记—P10(数组<1>+图解+题例)
|
C语言
C语言学习笔记——数组(二)
C语言学习笔记——数组
247 0
C语言学习笔记——数组(二)