c++ -- c风格字符串,以及c++通过c_str()方法与c风格字符串的转换 1. C/C++中每个字符串都以' '作为结尾,这样我们就能很方便找到字符串的最后结尾。 2. C/C++把常量字符串放到单独的一个内存区域 3. 字符指针与字符数组的区别 4.c风格字符串可以使用cout和cin作整体输入输出,但是,其他整体操作,如赋值、比较和连接都是不允许的。



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
";
11     else
12         cout<<"str1 and str2 are not same
";
13 
14     if(str3==str4)
15         cout<<"str3 and str4 are samem";
16     else
17         cout<<"str3 and str4 are not same
";
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','+','+','