一,不能使用字符串常量对字符数组名进行整体赋值操作
int main(){
char str[8];
str = "hello";
return 0;
}
上面的代码在编译时会出错,会报出下面这个错误
incompatible types in assignment of 'const char [6]' to 'char [8]'
可以使用字符串常量对字符数组进行初始化操作,要注意这两个操作的区别
int main(){
char str[9] = "hello";
return 0;
}
二,具有n个字符的字符串常量在内存中占有n+1个字节,因为串尾结束符'\0'会自动添加到串的末尾,作为串结束的标志
int main(){
cout<<sizeof("hello")<<endl;
}
输出结果
6
Process returned 0 (0x0) execution time : 0.006 s
Press any key to continue.
三,指针指向字符串时,字符串是常量,不能通过指针对其修改
下面的做法通不过编译
int main(){
char *p = "hello";
p[2] = 'k'; //非法操作
}
四,初始化字符数组
下面的代码在编译时没错,在运行时会出问题,会出现乱码,因为没有串尾结束符
int main(){
char str[5] = {'h', 'e', 'l', 'l', 'o'};
cout<<str<<endl;
}
五,使用两种不同的方式对字符数组进行初始化
int main(){
char str1[] = "hello";
char str2[] = {'h', 'e', 'l', 'l', 'o'};
cout<<"str1的长度: "<<strlen(str1)<<endl;
cout<<"str2的长度: "<<strlen(str2)<<endl;
cout<<"str1的大小: "<<sizeof(str1)<<endl;
cout<<"str2的大小: "<<sizeof(str2)<<endl;
return 0;
}
输出结果
str1的长度: 5
str2的长度: 10
str1的大小: 6
str2的大小: 5
Process returned 0 (0x0) execution time : 0.010 s
Press any key to continue.
程序分析
用字符串方式赋值比用字符逐个赋值要多占一个字节, 用于存放字符串结束标志'\0'。使用strlen()函数可以获取一个字符串的长度,遇到串尾结束符'\0'就结束。使用sizeof()运算符获取字符串的大小。