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

描述

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

最近有同学做笔试题的时候,遇到了这么一个问答题。

绝大多数人会把字符数组和字符串当作一个概念,因为在C语言中没有string这种类型,所以我们一般用字符数组来表示字符串。

要说他们的区别,我觉得主要就是 � 的问题。

定义字符数组,我们一般这样写:

 

char array[] = {'h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd'};;

 

但是这种写法存在很严重的问题,如果用 strlen 计算数组的长度或者用 printf 的 %s 格式来输出,那程序很容易奔溃。

因为数组里面只有 helloworld, 占10个字节,它达不到字符串的标准。

C语言中的字符串必须以 � 结尾,不管是 printf 还是 strlen 这些字符串处理函数,都是把 � 作为字符串的结束标志。

想要计算这个数组的长度,只能用 sizeof 关键字,得到数组实际占用内存的大小。

这个代码要想修改,有两种方法。

第一种把数组的容量改的大一些,程序就能正常运行。

 

char array[20] = {'h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd'};;

 

这种写法,helloworld 的后面全是 �。

此时的字符数组就是一个完整的字符串。

第二种在最后一个字符的后面手动加上一个 �,也能达到相同的效果。

 

char array[] = {'h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd', '�'};

 

当然这种写法太麻烦,我们一般直接写成这样。

 

char array[] = "helloworld";

 

这个地方的 helloworld 就是一个标准的字符串,存储的时候编译器会把最后的 � 一同加入到数组中。

这种写法推荐大家在写代码的时候使用。

有时候我们还会听到一个概念,字符串数组,比如写成这样的:

 

char array[] = {"helloworld", "123456"};

 

这个就比刚才的代码麻烦的多。

问大家一个问题,此时的数组array在内存中占几个字节?

  审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分