c++中字符是char数据类型的,字符串是字符组成的数组。
c风格字符串
//demo.cpp
#include <iostream>
int main()
{
const char* name="zhangsan";
std::cout<<name<<std::endl;
char name2[8]={'z','h','a','n','g','s','a','n'};
std::cout<<name2<<std::endl;
return 0;
}
结果
因为字符串的工作原理是,从首地址开始到0或者’\0’结束,打印name2的时候因为没有0所以不知道到哪里结束,打印了编译器插进来的一些内存。
c++中的 std::string
std::string 本质上还是一个char数组。string包含了一个char数组和一些内置函数。
#include <iostream>
#include <string>
int main()
{
std::string name="zhang";
//字符串拼接
name+="san";//
//或者
std::string name2=std::string("zhang")+"san";
bool em = name3.empty();//判断字符串是否为空
//R"()"通常用来输出多行字符串
std::string multiline = R"(line1
line2
lin3
lin4)";
std::cout<<multiline<<std::endl;
return 0;
}
//打印
line1
line2
line3
line4
字符串字面量
双引号之间的字符串。实际上是存储在内存的只读内存中。
以下有两段代码:
int main()
{
//第一段
char* test = "bbc";
test[0] = 'a';
//第二段
char test2[] = "bbc";
test2[0] = 'a';
}
事实上:有些编译器在第一段第一行代码就会提示错误,有些不会提示,但是第二行会报错:对只读内存进行操作。
第二段则可以正常运行,因为是在对数组进行操作。
2.看一些特殊的字符:宽字符
宽字符一个字符通常占两个字节,可以由编译器决定,一般在windows上占两个字节,linux上占4个字节
int main()
{
//宽字符
const wchar_t* name = L"zzc";
//占两个字节字符
const char16_t* name2=u"bbc";
//占4个字节字符
const char32_t*name4=U"aaz";
}
c标准库中的一些函数:
//demo.cpp
#include <iostream>
#include <stdlib.h>
int main()
{
"zhangsan";//字符串字面量,事实上是一个const char[]
const char name[4]="aac";
std::cout<<strlen(name)<<std::endl;//求字符串长度。打印结果:3
//strlen();遇0结束,计算0之前的字符长度
}