目录
一,字符串函数的介绍
1,strlen
(1)strlen函数的使用
(2)
2,strcpy(strncpy)
3, strcat(strncat)
4,strcmp(strncmp)
5,strstr
6,strtok
7,strerror
二,内存操作函数
1,memcpy
2,memmove
3,memcmp
4,memset
一,字符串函数
在C语言中非常需要字符函数与字符串,但C语言没有字符串类型C语言规定了’\0’作为结束符。字符串处理函数包含在<string.h>头文件中,常见的处理字符数组有:
strlen
1 size_t strlen(const char* str)
功能:计算字符串的长度,不包括’\0’
返回值:返回字符串的字符数
说明:
- strlen()函数计算的是字符串的实际长度,不包括’\0’,遇到第一个’\0’结束
- 参数指向的字符串必须以’\0’结束;
- 函数的返回值一定是size_,无符号的
- 假如你定义没有给它初始化,这个结果随机值,它会从首地址一直找下去,直到遇到’\0’才会停止
strlen函数的使用
1 int main()
{
//定义一组字符串
char arr1[]="sanfeng";
//表示数组首元素的地址是s,放入strlen函数
int ret = strlen(arr1);
//定义一个整型,接受函数的返回值
return 0;
}
strlen的模拟实现
1 size_t my_strlen(const char* str)
{
int count=0;
while(*str !='\0')
{
count++;
}
return 0;
}
strcpy函数的使用
1 char* strcpy(char* dest,const char* src)
功能:将参数src字符串拷贝到参数dest所指的地址
返回值:返回参数dest字符串的起始地址
说明:
- 源字符串必须以’\0’结束
- 会将源字符串的’\0’拷贝到目标空间
- 目标空间必须可变
- 如果参数dest所指的内存空间不够大,可能会造成缓冲溢出的错误请况,或者用strncpy()来取代
#include <stdio.h>
#include <string.h>
1 int main()
2{
3 char att1[20]="#################";
4 char att2[]="hello sanfeng";
5 strcpy(att1,att2);
6 printf("%d\n",att1);
7}
8
strcpy函数的模拟实现
char* my_strcpy(char* dest, const char* src)
{
assert(dest && src);
char* rem = dest;
while(*src)
{
dest=src;
dest++;
src++;
}
return rem;
}
1 int main()
{
char att1[20]="########################";
char att2[]="hello zhangsan";
my_strcpy(att1,att2);
printf("%s\n",att1);
}
strncpy函数
1 char* strncpy(char* dest, const char* src, size_t num)
功能:拷贝src字符串的前num个字符到dest
返回值:dest字符的起始地址
说明:
- src字符串小于num,拷贝完字符串后,在目标后追加’\0’直到num个
- src和dest所指向的内存区域不能重叠,并且dest必须有足够的空间放置num个字符
strncpy函数
1 int main()
{
char att1[20]="##################";
char att2[]="hello san";
strncpy(att1, att2, 5);
printf("%s\n",att1);
}
//拷贝att2中的5个字符到att1,输出的结果为 hello
strcat
1 char* strcat(char* dest ,const char* src)
功能:字符串拼接
返回值:返回dest字符串起始地址
说明:
- 源字符串必须’\0’结束
- 目标空间必须可修改
- strcat()将会参数src字符串拷贝到参数dest所指的字符串尾部
- dest最后的结束字符’\0’会被src的字符串覆盖,并且连接后的字符串的尾部再增加一个’\0’
strcat函数的使用
1 int main()
{
char att1[20]="hello";
char att2[]="sanfeng";
strcat(att1,att2);
printf("%d\n",att1);
//输出结果为hello san feng
}
strncat
1 char* strncat(char* dest, char* srce, size_t)
功能:将n个字符串拷贝到字符串的结尾
返回值:返回dest字符串的起始地址
说明:
- strncat会将从src字符串的开头拷贝n个字符到dest的尾部
- dest要有足够的空间来容纳拷贝的字符串
- 如果n大于字符串src的长度,那么仅将src全部字符加到dest的尾部,它会自动补0
- strncat会将dest字符串尾部的’\0’覆盖,字符自己完成后,再加说’\0’