1. C/C++中每个字符串都以'\0'作为结尾,这样我们就能很方便找到字符串的最后结尾。
1 char str[10];
2 strcpy(str,"0123456789"); //错误:数组越界。"0123456789"的实际长度为11个字节
2. C/C++把常量字符串放到单独的一个内存区域
为了节省内存,C/C++把常量字符串单独放到单独的一个内存区域。当几个指针赋值给相同的常量字符串时,它们实际上会指向相同的内存地址。但用常量内存初始化数组,情况却有所不同。
1 int main(int argc,char *argv[])
2 { 3 char str1[]="hello world"; //字符数组 4 char str2[]="hello world"; 5 6 char *str3="hello world"; //字符指针 7 char *str4="hello world"; 8 9 if(str1==str2) 10 cout<<"str1 and str2 are same\n"; 11 else 12 cout<<"str1 and str2 are not same\n"; 13 14 if(str3==str4) 15 cout<<"str3 and str4 are same\m"; 16 else 17 cout<<"str3 and str4 are not same\n"; 18 19 return 0; 20 } 21 //输出: 22 //str1 and str2 are not same 23 //str3 and str4 are same
3. 字符指针与字符数组的区别
3.1 字符指针可以指向一个字符串,字符数组可以存放一个字符串。
我们可以用字符串常量对字符指针进行初始化。如下面代码第1行是对字符指针进行初始化,此时,字符指针指向的是一个字符串常量的首地址,即指向字符串的首地址。
这里要注意字符指针与字符数组之间的区别。如下面代码第2行,此时,string是字符数组,它存放了一个字符串。
字符指针str与字符数组string的区别是:str是一个变量,可以改变str使它指向不同的字符串,但不能改变str所指的字符串常量。string是一个数组,可以改变数组中保存的内容。
1 char *str, *str1="This is another string"; //字符指针 2 char string[100]="This is a string"; //字符数组 3 4 //程序中,可以使用如下语句: 5 str++; /* 指针str加1 */ 6 str = "This is a NEW string."; /* 使指针指向新的字符串常量 */ 7 str = str1; /* 改变指针str的指向 */ 8 strcpy( string, "This is a NEW string.") /* 改变字符串的的内容 */ 9 strcat( string, str) /* 进行串连接操作 */ 10 11 //在程序中,不能进行如下操作: 12 string++; /* 不能对数组名进行++运算 */ 13 string = "This is a NEW string"; /* 错误的串操作 */ 14 string = str1; /* 对数组名不能进行赋值 */
15 str[0]='I'; //不能改变str所指的字符串常量 16 strcat(str, "This is a NEW string") /* 不能在str的后面进行串连接 */ 17 strcpy(str, string) /* 不能向str进行串复制 */
4.c风格字符串可以使用cout和cin作整体输入输出,但是,其他整体操作,如赋值、比较和连接都是不允许的。
//C提供的声明字符串的方法 char str[]={'I',' ','L','O','V','E',' ','C','+','+','\0'}; //C++提供的声明C风格字符串的方法--使用字符串常量 char x[10],y[11]="I LOVE C++"; //会默认在最后添加空字符'\0',要多申请1内存 x="123456789"; //错误 x=y; //错误 if(x<y) //错误 { .... } x+=y; //错误
char *str="I LOVE C++"; //错误,字符指针