字符数组和字符串有没有区别?
最近有同学做笔试题的时候,遇到了这么一个问答题。
绝大多数人会把字符数组和字符串当作一个概念,因为在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在内存中占几个字节?
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !