0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C语言字符数组和字符串有什么区别

汽车电子技术 来源: 嵌入式悦翔园 作者:JamesBin 2023-02-17 14:27 次阅读

用来存放字符的数组称为字符数组。字符数组的各个元素依次存放字符串的各字符,字符数组的数组 名代表该数组的首地址,这为处理字符串中个别字符和引用整个字符串提供了极大的方便。

一、字符数组

字符数组的定义形式与前面介绍的数值数组相同。例如:

char c[10];

字符数组也允许在定义时进行初始化赋值。例如:

char c[6]={'c', ' h ', 'i', 'n', 'a' , '\\0' };

对字符数组的各个元素逐个赋值后,各元素的值为:

c[0]= 'c',c[1]= 'h',c[2]= 'i',c[3]= 'n',c[4]= 'a',c[5]= '\\0';

其中,‘\\0’为字符串结束符。如果不对 c[5]赋任何值,‘\\0’会由系统自动添加。

字符数组也可采用字符串常量的赋值方式,例如:

char a[]={"china"};

二、两者的区别

1、定义不一样

1、字符串指针变量本身是一个变量,用于存放字符串的首地址。字符串本身是存放在以该首地址为首的一块连续的内存空间中并以‘\\0’作为串的结束。

2、字符数组是由于若干个数组元素组成的,它可用来存放整个字符串。

2、对字符串指针方式不同

1、char *ps=”C Language”;可以写成char *ps;ps=”C Language”;

2、数组方式char st[]={”C Language”};不能写成char st[20];

St={”C Language”};只能对字符数组的各元素逐个赋值。

字符串主要用于编程,概念说明、函数解释、用法详述见正文,这里补充一点:字符串在存储上类似字符数组,所以它每一位的单个元素都是可以提取的。

如s=“abcdefghij”,则s[1]=“b”,s[9]="j",而字符串的零位正是它的长度,如s[0]=10(※上述功能Ansistring没有。),这可以给我们提供很多方便,如高精度运算时每一位都可以转化为数字存入数组。

字符串数据类型是建模在形式字符串的想法上的数据类型。字符串是几乎在所有编程语言中可以实现的非常重要和有用的数据类型。在某些语言中它们可作为基本类型获得,在另一些语言中做为复合类型获得。

多数高级语言的语法允许通常用某种方式引用起来的字符串来表示字符串数据类型的实例;这种元字符串叫做“文本”或“字符串文本”。

3、结束标志不同

字符串: 必须以'\\0'结尾;// ‘ \\0 ’ 的意义是“字符串结束符”。

字符数组: 可bai以包含多个'\\0',但是如果当做字符串处理,则实际有效字符串为第一个'\\0'的签名的字符串,如果当做字符数组处理,可以处理字符数组的任何一个字符,所有的字符都可以是'\\0'。

4、特点不同

字符串在存储上类似字符数组,所以它每一位的单个元素都是可以提取的,如s=“abcdefghij”,则s[1]=“b”,s[9]="j"。

而字符串的零位正是它的长度,如s[0]=10(※上述功能Ansistring没有。),这可以给我们提供很多方便,如高精度运算时每一位都可以转化为数字存入数组。

字符数组是指用来存放字符数据的数组。其定义的一般形式为:char 数组名[数据长度] 。字符数组用于存放字符或字符串,字符数组中的一个元素存放一个字符,它在内存中占用一个字节。C语言中没有字符串类型,字符串是存放在字符型数组中的。

三、字符串示例

strdup与strcpy

函数和功能描述:

①extern char *strdup(char *s);

头文件: string.h

功能: 将串拷贝到新建的位置处

说 明: strdup不是标准的c函数。strdup()在内部调用了malloc()为变量分配内存,不需要使用返回的字符串时,需要用free()释放相应的内存空间,否则会造成内存泄漏。

返回值: 返回一个指针,指向为复制字符串分配的空间;如果分配空间失败,则返回NULL值。

②char strcpy(char dest, const char *src);

头文件: #include 和 #include

功能: 把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间

说明: strcpy是标准的C语言标准库函数。src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。

返回值: 返回指向dest的指针。

总结:

1.strdup可以直接把要复制的内容复制给没有初始化的指针,因为它会自动分配空间给目的指针,strcpy的目的指针一定是已经分配内存的指针。

2.strdup用完要free()函数释放内存,否则内存泄露 。

3.使用strcpy必须事先确定src大小,可以先strlen判断src的大小,之后为dest申请空间,之后再strcpy就不会有问题了。

内存函数

内存函数直接对内存操作,不仅能够处理字符串,还能够处理不论什么类型的数组、结构等。

在标准C中,这些函数被觉得是字符串函数的一部分,是在头文件string.h中声明的。

void * memcpy(void *dest, const void *src, size_t n) ;
//从src地址处复制n个字节到dest , 并返回地址dest的值
void * memmove(void *dest, const void *src, size_t n) ;
//其功能与上个函数同样。差别在于:memmove函数在源内存区域和目标内存区域重叠的情况下也能正确运行操作。
void * memchr(const void ptr, int val, size_t len) ;
/在地址ptr后的前len个字符中搜索val值的第一次出现。
假设找到val。它返回一个指向包括val值的第一个字符的指针,否则返回一个null字符。(每一个字符依据表达式(unsigned char)c == (unsigned char)val 比較)*/


void * memset(void * ptr, int val, size_tlen) ;
//把val拷贝到从ptr開始的len个字符中,ptr所指定的字符被觉得是unsignedchar类型


int memcmp(const void * ptr1, const void * ptr2, size_t len) ;
//把ptr1的前len个字符与ptr2的前len个字符进行比較。假设第一个字符串按字典顺序小于第二字
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 字符
    +关注

    关注

    0

    文章

    233

    浏览量

    25199
  • 字符串
    +关注

    关注

    1

    文章

    578

    浏览量

    20506
  • 数组
    +关注

    关注

    1

    文章

    417

    浏览量

    25939
收藏 人收藏

    评论

    相关推荐

    C++字符串string

    string是C++编程语言中的字符串。在C++中字符串处理可以使用c
    的头像 发表于 07-10 00:26 1272次阅读
    <b class='flag-5'>C</b>++<b class='flag-5'>字符串</b>string

    数组、向量和字符串 实验

    实验 5 数组、向量和字符串一、实验目的 1. 掌握Java中的数组定义、引用2. 掌握向量的基本概念和应用技术3. 掌握使用字符串String类
    发表于 09-23 19:00 1546次阅读

    C语言入门教程-字符串

    字符串 数组按常规顺序保存字符:str[0]保存字符串的第一个字符,str[1]保存第二个,等等。但为什么一个大小为100的
    发表于 07-29 14:17 1623次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>入门教程-<b class='flag-5'>字符串</b>

    C语言字符串转数字实现方法

    C/C++语言中没有专门的字符串变量,通常用字符数组来存放
    发表于 11-14 17:50 1.3w次阅读

    c语言字符数组详解

    ",a[i][j]);}printf("\n");}} 在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个
    发表于 11-16 10:22 2075次阅读

    C语言字符串处理函数

    指针是神奇的,指向整型的指针int *p1,可以操作整型数组int a[];指向字符型的指针char *p2,可以操作字符数组字符串)ch
    发表于 07-24 17:37 4次下载
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>的<b class='flag-5'>字符串</b>处理函数

    用指针实现字符串拷贝的程序和字符型指针变量与字符数组区别说明

    字符串是存放在字符数组中的,对字符数组中的字符逐个处理时,前面介绍的指针与
    发表于 11-05 16:15 2次下载
    用指针实现<b class='flag-5'>字符串</b>拷贝的程序和<b class='flag-5'>字符</b>型指针变量与<b class='flag-5'>字符</b><b class='flag-5'>数组</b>的<b class='flag-5'>区别</b>说明

    C语言总结_字符串全方位练习

    C语言字符串全方位练习,涉及知识点:字符串解析、大小写判断、字符串插入、字符串删除、
    的头像 发表于 08-14 09:41 1484次阅读

    C语言字符串的引用方式

    C语言程序中,字符串是存放在字符数组中的。 2. 用字符
    的头像 发表于 03-10 14:57 1907次阅读

    C语言定义字符串的几种方法

    C语言中定义字符串哪些方法?
    的头像 发表于 03-31 09:41 3553次阅读

    如何处理C Dll中的字符串数组参数

    有关C/C++中稍微复杂一点与字符串相关的一些类型参数,在LabVIEW处理起来还是一点小麻烦的,主要是涉及到内存分配,在使用LabVIEW时几乎不用考虑这个问题,但在
    的头像 发表于 04-25 14:02 1480次阅读
    如何处理<b class='flag-5'>C</b> Dll中的<b class='flag-5'>字符串</b><b class='flag-5'>数组</b>参数

    c语言字符串定义

    C语言是一种强大而广泛使用的编程语言字符串是其中一个非常重要的概念。在C语言中,
    的头像 发表于 11-24 10:02 1929次阅读

    字符数组字符串有没有区别

    字符数组字符串有没有区别
    的头像 发表于 11-30 16:39 662次阅读

    C语言字符串编译函数介绍

    C语言中,字符串实际上是使用null字符O'终止的一维字符数组。因此,一个以null
    的头像 发表于 03-07 16:18 501次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言</b><b class='flag-5'>字符串</b>编译函数介绍

    labview字符串数组转化为数值数组

    在LabVIEW中,将字符串数组转换为数值数组是一项常见的任务,尤其是在处理数据采集、信号处理或用户输入时。 1. 理解LabVIEW的数据类型 在开始之前,了解LabVIEW中的数据类型是非
    的头像 发表于 09-04 17:47 2245次阅读