(C语言之路-----p9: C语言中的常见字符串处理和内存处理函数总结)
一.字符串处理函数
1.strlen
size_t strlen(char *str);
//功能:计算字符串的长度(不包括'\0')
//参数(从左至右):待计算长度的字符串.
//返回值:无符号整型,表示字符串长度
//注意事项:注意,这里的字符串指的是字符数组,末尾有'\0',而不是string类型
实际使用方法如下:
2.strcpy和strncpy
2.1不受长度限制的strcpy
char* strcpy(char *destination, const char* source);
//功能:将源字符串拷贝至目标字符串
//参数(从左至右):目标字符串; 源字符串
//返回值:指向拷贝后目标字符串的首元素的地址
//注意事项:1.目标字符串空间必须足够大,以确保存储拷贝过来的源字符串
//2.目标空间必须是左值或者可变的值
实际使用方法如下:
2.2受长度限制的strnpy
char* strncpy(char* destination, const char* source, size_t num);
//功能:将源字符串的前n个字符拷贝至目标字符串
//参数(从左至右):目标字符串; 源字符串; 要拷贝的字符的个数
//返回值:指向拷贝后的目标字符串首元素的指针
实际使用方法如下:
3.strcat和strncat
3.1不受长度限制的strcat
char* strcat(char* destination, const char* source);
//功能:将源字符串追加到目标字符串末尾
//参数(从左至右):目标字符串; 源字符串
//返回值:指向目标字符串的首元素的指针
//注意事项:与strcpy相同.不能给将字符串追加到自身的末尾,否则会发生内存交差.
strcat的实现
char* my_strcat(char* dest, const char* src)
{
char* t = src, *res = dest;
while(*dest) dest++;
while(*src) *dest++ = *src++;
return res;
}
//所以自身追加字符串会出现内存交差
实际使用方法如下:
3.2受长度限制的strncat
char* strncat(char* destination, char* source, size_t num);
//功能:将源字符串的前n个字符追加至目标字符串的末尾
//参数(从左至右):目标字符串; 源字符串; 要追加的字符个数
//返回值:指向目标字符串首元素的指针
实际使用方法如下:
4.strcmp和strncmp
4.1不受长度限制的strcmp
int strcmp(const char* str1, const char* str2);
//功能:比较两个字符串的大小,如果str1(第一个字符串)大于str2(第二个字符串),返回一个大于0的数;如果两个字符串相同,则返回0;如果是其他情况,则返回0.
//比较规则:首先,对于两个字符串,从第1个字符开始,如果两个字符字典序一致,则比较后面一个字符;如果两个字符字典序不同,那么根据字典序确定大小;如果两个字符串中,一个字符串(我们称之为str1)是另外一个字符串(我们称之为str2)的前缀,那么str1小于str2.如果是其他情况,那么两个字符串相同
//参数(从左至右):第一个字符串; 第二个字符串
//返回值:如果第一个字符串大于第二个字符串,返回大于0的数; 如果第二个字符串大于第一个字符串,则返回一个小于0的数;其他情况返回0
使用方法如下:
4.2受长度限制的strncmp
int strncmp(const char* str1, const char* str2, size_t num);
//功能:对比两个字符串前n个字符,返回值同strncmp
//参数(从左至右):第一个字符串; 第二个字符串
//返回值:同strcmp
实际使用方法如下:
5.strstr
char* strstr(const char* str1, const char* str2);
//功能:在一个字符串(我们称之为原串)中,查找另外一个字符串(我们称之为模板串),如果找到了则返回模板串对应的原串的起始位置(如果找到多次则返回第一个找到的),如果未找到则返回NULL
//参数(从左至右):原串; 模板串
//返回值:模板串第一次在原串出现的地址
实际使用方法如下:
6.strerror
char* strerror(int errnum);
//功能:翻译系统内置的错误码成字符串.(系统内置错误码:当程序运行出现错误时,系统会产生错误码,不同的错误码表示不同的错误)
//参数(从左至右):错误码
//返回值:字符串
//注意事项:要与errno结合使用(需要引用<errno>头文件),原理是, 系统产生的错误码会自动存到errno变量中
实际使用方法:
二.内存处理函数
1.memset
void* memset(void* str, int c, size_t num);
//功能:将一段长度为num字节的空间按字节全部置成c
//参数(从左至右):空间的起始地址; 要设置的值; 要设置的大小(单位是字节)
//返回值:指向储存区str的指针
//注意事项:1.是按字节设置的.
//2.对于整型来说,一般只能将一块空间置为0, -1(或者0xff), 0x3f.
实际使用方法如下:
2.memcpy和memmove
void* memcpy (void* destination, const void* source, size_t num);
void* memmove(void* destination, const void* source, size_t num);
//功能:两者都是将源字符串的内存按照字节复制到目标字符串
//参数(从左中右):目标字符串; 源字符串; 要复制的字节数
//返回值:复制成功后目标字符串的地址
//注意事项:从C语言标准来说,memmove的功能会比memcpy完善,因为他允许目标字符串与原字符串存在内存交差
实际使用方法如下:
3.memcmp
int memcmp(const void* ptr1, const void* ptr2, size_t num);
//功能:与strcmp功能相似,只不过memcmp是按字节比较两块空间
//参数(从左至右):第一块空间的地址, 第二块空间的地址, 比较的字节数.
//返回值:同strcmp
使用方法如下:
3.memcmp
int memcmp(const void* ptr1, const void* ptr2, size_t num);
//功能:与strcmp功能相似,只不过memcmp是按字节比较两块空间
//参数(从左至右):第一块空间的地址, 第二块空间的地址, 比较的字节数.
//返回值:同strcmp
使用方法如下: