目录
函数名:void *memset(void *s, int c, size_t n);
字符数组
概念
- char 字符型组成的数组:在 C 语言中,字符数组是由一系列
char
类型的字符组成的集合体。一个char
类型占用 1 个字节的内存空间,并且对应一个内存地址。
p.s. 字符串常量的特点:字符串常量用双引号括起来,如 “abc”。它的总长度为 4 字节,其中有效长度为 3 字节,这是因为字符串常量的末尾有一个特殊的字符'\0'
,这个字符标志着字符串的结束。 字符串代表自身首字符地址。
字符串常量的值不能被改变,只有存储在变量中的字符串才能改变其内部数据。
定义和初始化
定义:
char a[总长度];
这里的总长度指定了字符数组可以存储的最大字符数量。
初始化方式:
全部初始化:
可以逐个列出字符进行初始化。
char a[10]={'a','b','a','b','a','b','a','b','a','b'};
也可以使用 ASCII 码值进行初始化.
char a[10]={32,48,49, 32,48,49,50, 32,48,49};
部分初始化:
可以只初始化一部分字符
char a[10]={‘a’, ‘b’};
也可以用字符串常量进行初始化
char a[10]= “abc”;
还可以直接初始化为 0,即
char a[10]={0};
。
特殊初始化:
可以直接使用字符串常量进行初始化,而不指定数组的长度
char a[]=“abc”;
此时编译器会自动根据字符串的长度确定数组的大小。
字符数组比前面所讲的一维二维初始化多了一种字符串直接使用的初始化
二维字符数组
二维字符数组可以用来存储多个字符串。例如:
char a[3][60]={0};
char a[3][60]={{0},{‘a’, ‘b’}};
char a[3][60]={“abc”, “123”, “edf”};
for(int i=0;i<3;i++) {
printf(“%s\n”,a[i]);
}
printf(“%s\n”,&a[0][1]);
在这个例子中,我们定义了一个二维字符数组a
,并使用不同的方式进行了初始化。然后通过循环打印出每个字符串,最后打印出a[0][1]
地址开始的字符串。
字符串操作函数
头文件:#include
函数名:strlen(s)
函数功能:求字符串有效长度
函数参数:s:填入字符串起始地址
函数返回值:输出有效长度
函数使用:
int len=0;
len = strlen(“hello”);
char str[20]= “hello”;
strlen(str);
sizeof()和 strlen()的区别
sizeof() 运算符 关键字 求总占用长度
strlen() 函数 求有效长度,只能用于字符串
函数名:strcmp(s1,s2)
函数功能:比较字符串是否相同
函数参数:s1,s2:两个字符串的起始地址
函数返回值:相同返回0,不相同返回s2与s1第一个不相同字符的差值(s1-s2)
函数使用:
char str1[30]= “123”;
char str2[30]= “1234”;
int cmp = 0;
cmp = strcmp(str1, str2);
if(cmp==0) {
printf(“相同\n”);
}
函数名:strcpy(s1,s2)
函数功能:把s2复制到s1中
函数参数:s1,s2:两个字符串的起始地址
函数返回值:成功返回s1的起始地址
函数使用:
char str1[30]= “123456789”;
char str2[30]= “abc”;
printf(“%s\n”,strcpy(str1,str2));
函数名:strcat(s1,s2)
函数功能:把s2拼接到s1后面
函数参数:s1,s2:两个字符串的起始地址
函数返回值:成功返回s1的起始地址
函数使用:
char str1[30]= “123456789”;
char str2[30]= “abc”;
printf(“%s\n”,strcat(str1,str2));
函数名:void *memset(void *s, int c, size_t n);
函数功能:把一个指定的内存段按字节初始化为指定数据
函数参数:s:内存段的起始地址 c:指定数据 n:初始化的长度
函数使用:
char a[100];
memset(a,0,sizeof(a)); // 从 a 的起始地址开始向后初始化100个字节,每个字节都为0
字符串输入gets()
gets()
函数:用于字符串的行输入,可以读取一整行的字符串,包括空格等字符。puts()
函数:自动清空缓冲区并输出字符串,然后自动换行。
scanf()会造成缓冲区残留,所以建议每个scanf()后面都加上清空缓冲区
while(getchar()!= ‘\n’); // 清空缓冲区操作
scanf(“%s%s”,str1,str2); //123 abc
char str[100]={0};
gets(str); // 字符串行输入
p.s.gets
函数由于无法限制输入字符串的长度,容易导致缓冲区溢出