0%

C语言 "Hello"和 'H','e','l','l','o'的区别

C语言的字符串

何为字符串,就是将字符串起来,哈哈,跟羊肉串一样。

这次说说早就应该介绍的字符串,其实字符串主要坑比较多,刚开始用还没啥,越用越心虚。

那咱们就从不心虚的地方说起吧。

来个官方定义:

字符串实际上是使用 null 字符 ‘\0’ 终止的一维字符数组。
所以一个以 null 结尾的字符串,包含了组成该字符串的字符。

是个什么意思呢,来看个实例了解下。

比如我们声明和初始化创建了一个 “Hello” 字符串。

1
char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};

这里就有疑问了,本着勤俭节约的精神,吃饭不要铺张浪费,吃饱吃好就行,不耍排场。
这里也应该这样呀,你的Hello只有5个字符,为什么要用6个字符数组???

这是字符串的第一个坑,建议的解决方法是尽可能比你需要的大一些字符,在目前内存与房价齐飞的阶段,不多你几个字符,原因如下:

由于在数组的末尾存储了空字符,所以字符数组的大小比单词 “Hello” 的字符数多一个。

还有一个疑问就是,这样写字符串也太-太-太啰嗦了吧,是的,所以另外一种的使用方法为:

1
char greeting[] = "Hello";

整齐划一有内涵。

这两个值倒是在内存里面如何存储呢,我们来个表格看看:

下标 0 1 2 3 4 5
变量 H e l l o \0

看到没有,最后一位就是null,即\0

看个简单的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/*beginner/string/string1.c*/
#include <stdio.h>

int main()
{
char s1[6] = "Hello";
char s2[6] = {'H', 'e', 'l', 'l', 'o'};

printf("s1 is %s\n", s1);
printf("s2 is %s\n", s2);

return 0;
}

编译运行

直接输入make就可以了。

1
2
3
4
5
6
7
8
9
10
11
12
#beginner/string/Makefile
ALL : string1

string1: string1.c
gcc -o string1 string1.c


.PHONY : clean

clean:
rm -f string1

运行输出如下:

1
2
3
$ ./string1
s1 is Hello
s2 is Hello
处无为之事,行不言之教;作而弗始,生而弗有,为而弗恃,功成不居!

欢迎关注我的其它发布渠道