字符型数组和字符串的使用
字符型数组
字符型数组的使用方法和一般的整型数组没有太大的区别,常用的定义和初始化方式如下:
char c[5] = {'H','e','l','l','o'};
char d[] = {'H','e','l','l','o'};
另外,我们在定义字符串的长度以后,需要对所有的位置都初始化,未被初始化的元素会自动被填上空字符’\0’,例如如下两种复制实际上是等价的
char c[7] = {'H','e','l','l','o'};
char d[7] = {'H','e','l','l','o','\0','0'};
另外,一个比较有趣的事情是,字符串可以用整型的数组进行存储,只是这种用法会造成一半的存储空间被浪费
int c[5] = {'H','e','l','l','o'};
int d[] = {'H','e','l','l','o'};
字符串
字符串没有自己的数据类型,他和字符型数组使用相同的存储结构。唯一的区别是字符串的末尾会加入一个空字符’\0’,在运行时如果在字符数组的末尾出现空字符,就会被当做字符串处理。字符串的初始化可以用字符串的方式,也可以用数组初始化的方法,例如:
char c[6] = {“Hello”};
char d[6] = {'H','e','l','l','o','\0'};
这两种方法完全等价。
需要注意的是,当字符串的赋值超过数组的长度时,并不会发生错误,反而多出的部分会对指针越界指向的存储空间进行赋值,这可能导致其他位置的数据发生错误。在网络黑客攻击中一种比较低端的攻击方式,就是利用这种溢出修改计算机中的数据从而造成系统崩溃。