C中字符串的末尾会有**"/0" **,而字符数组没有
char name[21]; //字符串,最多存放20个英文字符或10个中文字符,最后一个字符为 " /0 "
C风格字符串的使用字符串的初始化char name[11];//未初始化,其值为垃圾直char name[11] = "Hello";//初始化为Hello,系统自动在末尾添加"/0"char name[11] = {"Hello"}; //初始化为Hello,系统自动在末尾添加"/0"char name[] = {"Hello"};//初始化为Hello,系统自动在末尾添加"/0"char name[11] {"Hello"};//初始化为Hello,系统自动在末尾添加"/0"(C++ 11 标准)char name[11] = {0};//全部元素初始化为0
清空字符串使用memset()
函数清空字符串
(资料图片仅供参考)
语法:memset(字符数组的首地址即数组名,0,数组内存的空间大小)
char name[10];memset(name,0,sizeof(name));//结果0 0 0 0 0 0 0 0 0 0
字符串复制或赋值❗C语言字符串不能用" = "赋值
strcpy()函数语法:strcpy(目标字符串,源字符串)
返回值:返回目标字符串的首地址
⚠复制完字符串后,会自动在目标字符串后面追加" /0 "
如果目标字符串所指向的内存不够大,则会导致数组越界
char name[11] = {"Hello"};char namecpy[11];strcpy(namecpy,name);//结果namecpy[11]——>Hello
strncpy()函数语法:strncpy(目标字符串,源字符串,n个字符)
返回值:返回目标字符串的首地址
⚠如果源字符串小于n,则拷贝完后会在目标字符串后追加" /0 "
如果源字符串大于或等于n,则截取前n个字符,且不会再目标字符串后追加" /0 "
如果目标字符串所指向的内存不够大,则会导致数组越界
char name[11] = {"Hello"};char namecpy[11];strcpy(namecpy,name,3);//结果namecpy[11]——>Hel
字符串长度语法:strlen(字符串的首地址即字符串名)
char name [11] = { "Hello" };cout << strlen(name) << endl;//输出结果5//检索到"/0"时结束
字符串拼接strcat()函数语法:strcat(目标字符串,源字符串) ==目标字符串原有的"/0"会被覆盖掉==
char firstname[10] = {"Hello"};char lastname[10] = {" World"};strcat(firstname,lastname);//运行结果Hello World
strncat()函数语法:strcat(目标字符串,源字符串,n个字符) ==目标字符串原有的"/0"会被覆盖掉==
char firstname[10] = {"Hello"};char lastname[10] = {" World"};strcat(firstname,lastname,2);//运行结果Hello Wo
字符串比较目标字符串与源字符串(或源字符串前n个字符)比较 | 返回值 |
---|---|
> | 1(ASCII码的差) |
= | 0 |
< | -1(ASCII码的差) |
语法:strcmp(目标字符串,源字符串)
char name1[10] = {"Hello"};char name2[10] = {"hello"};strcmp(name1,name2);//运行结果-32
strncmp()函数语法:strcmp(目标字符串,源字符串,前n个字符)
char name1[10] = {"Hello"};char name2[10] = {"hello"};strcmp(name1,name2,3);//运行结果-32
字符查找strchr(字符串,要查找的字符)【是从一个字符串str中第一次出现该字符character的位置】
strrchr(字符串,要查找的字符)【是从一个字符串str中最后一次出现该字符character的位置】
返回值:如果在字符串 str 中找到字符 c,则函数返回指向该字符的指针,存在和首地址相减,可以得到下标。如果未找到该字符则返回 NULL。
字符串查找语法:strstr(字符串,子串)
返回值:返回子串在字符串中第一次出现的地址,没有返回0
⚠C风格字符串的注意事项5⃣在VS中使用C风格字符串是应加上#define _CRT_SECURE_NO_WARNINGS
1⃣字符串的结尾标志为"/0",在处理时会从起始位置开始搜索直到搜索到"/0"为止
不会判断数组越界的原因:
操作字符串的函数形参为指针,只存放了字符串的起始地址,没有字符串的长度参数,无法判断是否越界
2⃣结尾标识符"/0"后面都是垃圾值
3⃣字符串在每次使用前都要初始化
4⃣不要再子函数里面使用sizeof运算符(因为子函数中的参数为指针,总是占8字节(64位操作系统))