1. 字符串的定义方式和底层细节

1.1 定义方式

  1. 利用字符数组+双引号:char 数组名[长度] = "xxx";

  2. 将字符串地址储存在指针变量(指针+双引号):char* 指针变量名 = "xxx";

1.2 底层细节

  • 在实际储存的时候,C会将字符串保存成字符数组进行保存,并且末尾要加上’\0’
  • 数组的长度要么不写,写的话要把结束标记的空间预留出来
  • 第一种定义方式利用字符数组定义,其内容可以发生改变
  • 第二种定义方式定义字符串,会把底层的字符数组放在只读常量区(不可以修改,可以复用)(复用指:如果创建的新的在只读常量区已经存在,那么会直接引用那一个)

2.字符串数组

2.1 利用二维数组

基本格式:

1
2
3
4
5
6
char strArr[3][y] = 
{
"AAAAAAA",
"BBBBBBB",
"CCCCCCC"
}

2.2 利用指针数组

将五个字符串的指针放入一个数组:

1
2
3
4
5
6
char* strArr2[3] = 
{
"AAAA",
"BBBB",
"CCCC"
}

3.字符串常见函数

用这些函数记得调用头文件:#include <string.h>

3.1 strlen获取字符串长度

1
int len1 = strlen(str1);
  • strlen()返回的是整数,不计算结束标记
  • windows中默认情况下,一个中文占两个字节

3.2 strcat拼接字符串

1
strcat(str1, str2);
  • strcat把第二个字符串中的全部内容拷贝到第一个字符串的末尾
  • 第一个字符串中剩余的空间可以容纳拼接的字符串前提:第一个字符串是可以被修改的,第一个字符串中剩余

前提:第一个字符串是可以被修改的,第一个字符串中剩余的空间可以容纳拼接的字符串

3.3 strcpy复制字符串

1
strcpy(str2, str3);
  • 把第二个字符串中的全部内容,拷贝到第一个字符串中,把第一个字符串里面原有的内容给覆盖了

前提:第一个字符串中的空间可以容纳第二个字符串的完整内容

3.4 strcmp比较字符串

1
int res = strcmp(str1, str2);
  • 返回有两个结果,完全一样:0,只要有一个不一样:非0

3.5 strlwr变小写

1
_strlwr(str2);
  • 只能转换英文大小写

3.6 strupr变大写

1
_strupr(str2);
  • 只能转换英文大小写

4.拓展

4.1 ungetc()

1
ungetc(返回的字符串, stdin);