C语言并没有专门用于存储字符串的数据类型,字符串存储在char类型的数组中,如下定义了一个字符串变量:
char a[] = "hello";
要让字符数组表示为字符串,该字符数组的末尾一定要是空字符’\0’,这是普通的字符数组和字符串的最显著的区别,只有在,只有这样,系统才会识别为字符串。上面的字符串声明示例等价于:
char a[] = {'h','e','l','l','o','\0'}
如下示例中,a会识别为字符串,而b只是由字符组成的数组,因为末尾没有空字符’\0’:
char a[] = {'h','e','l','l','o','\0'};
char b[] = {'h','e','l','l','o'};
在指定字符数组的长度时,要确保该值至少比字符个数多1,因为与要容纳最后的空字符。
不过,通常并不使用字符串数组的方式声明字符串字面量,而是直接采用引号的方式,编译器会自动加入末尾的空字符’\0’。
除了使用字符数组的方式声明字符串以外,还可以使用字符指针:
const char * str = "hello";
与数值、字符这种单一类型不同的是,str的数据类型虽然是指针,但是打印字符串时依然使用的是a,只需要使用%s转换说明即可:
printf("address: %p \n value : %s ", str, str );