字符串是由若干字符组成的序列。C/C++中。每个字符串都是以字符‘\0’作为结尾,这样我们就能方便得找到字符串得尾部。
但是,这个特点会造成字符串越界。例如:
char str[10];
strcpy(str,"0123456789");
虽然事先声明了一个长度为10得字符数组,然后把字符串复制到该数组中。该字符串看起来只有10个字符,实际上末尾还有一个额外得'\0'字符。所以它的实际长度是11个字节。
为了节省内存,C/C++把常量字符串放到一个单独的内存区域。当几个指针赋值给相同的字符串时,它们实际上会指向相同的内存地址。
char str1[] = "hello world";
char str2[] = "hello world";
char *str3 = "hello world";
char *str4 = "hello world";
其中,str1和str2是两个字符串数组,会分配两个长度为12个字节的空间,其初始地址不同,str1和str2也不相等。
str3和str4是两个指针,无需分配内存来存储字符串的内容,只需要将其指向“hello world”的内存地址即可。故,str3和str4相等。