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

    文章

    229

    浏览量

    24888
  • 字符串
    +关注

    关注

    1

    文章

    551

    浏览量

    20121
  • 数组
    +关注

    关注

    1

    文章

    409

    浏览量

    25595
收藏 人收藏

    评论

    相关推荐

    C语言字符数组字符串的使用详解

    如果花括号中提供的字符个数大于数组长度,则按语法错误处理;若小于数组长度,则只将这些字符数组中前面那些元素,其余的元素自动定为空
    发表于 11-24 10:12 1309次阅读

    关于字符串还原的问题?

    想问下字符串还原中的类型部分接入0,其他整数和数组,结果有什么区别吗?
    发表于 01-11 12:39

    请问十六进制显示的字符串转十进制显示和正常显示的字符串转十进制显示什么区别

    “十六进制显示的字符串”转“十进制”显示和“正常显示的字符串”转“十进制”显示什么区别呢? 我写的程序,控件2可以正常显示字符串,十进制显
    发表于 03-30 20:47

    labview如何将字符串数组元素的英文转化为字符串数组中文显示,字符串数组各元素值是变化的

    各位大神,labview如何将字符串数组元素的英文转化为字符串数组中文显示,字符串数组各元素值是
    发表于 01-15 15:09

    LABVIEW 字符串变成字符数组

    怎么把一个字符串变成一个字符数组 ? 比如String "abc" 变成string[]{"a","b","c"}这种
    发表于 04-21 18:02

    什么是指向字符串指针?

    的方式在做字符串处理的时候,非常吃力,最好的方式就是可以将这些字符存储到一个集群式的变量里面,我们C语言中集群式的存储类型只有数组一种类型,
    发表于 03-15 14:19

    C语言是如何实现字符串大小与字符串比较的函数

    C语言实现字符串比较(非库函数)今天在keil上写代码时,使用strlen和strcmp一直会有警告,所以就有了下面的东西,自己写一个判断数组大小和
    发表于 07-14 06:40

    字符串字符数组的转换字符数组介绍

    字符串字符数组的转换字符数组 -----》字符串1:直接在构造String时转换。char[]
    发表于 01-12 07:01

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

    在C/C++语言中没有专门的字符串变量,通常用字符数组来存放字符串字符串是以“\0”作为结束符
    发表于 11-14 17:50 1.3w次阅读

    c语言字符数组详解

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

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

    字符串是存放在字符数组中的,对字符数组中的字符逐个处理时,前面介绍的指针与
    发表于 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语言程序中,字符串是存放在字符数组中的。 2. 用字符数组存放一个
    的头像 发表于 03-10 14:57 1379次阅读

    c语言字符串定义

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

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

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

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

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