c语言中的字符串函数
主要是两大类,一类是拷贝的,一类是比较的,另一个就是其他的
拷贝的有:
1. strcpy
函数原型
char *strcpy( char *strDestination, const char *strSource );
函数功能
将strSource的内容拷贝到strDestination中去,包括' \0'
返回值
返回strDestination的内容
特点
strSource和strDestination的内存区域可能重叠,没有定义
没有检查strDestination的大小是否够
2 strcpy_s
函数原型
errno_t strcpy_s( char *strDestination, size_t numberOfElements, const char *strSource ); |
函数功能
将strSource的内容拷贝到strDestination中去,包括' \0'
返回值
成功返回0
特点
strSource和strDestination的内存区域可能重叠,没有定义
检查了strDestination的大小
3 memset
函数原型
void *memset( void* dest, intc, size_tcount);
函数功能
将count个c 赋值到dest里面去,经常用于将字符串清零。
返回值
dest
4 memcpy
函数原型
void *memcpy( void* dest, const void*src, size_tcount);
函数功能
将count个字符从src中拷贝到dest中
返回值
dest
特点
不能处理src和dest有内存重叠的情况(overlapping regions)
代码原型
char* m_memcpy(char* dest, const char* src, int n)
{
char* p=dest;
while (n)
{
if (*src!='\0')
*p=*src;
src++;
p++;
n--;
}
*p='\0';
return dest;
}
5 memmove
函数原型
void *memmove( void* dest, const void*src, size_tcount);
函数功能
将count个字符从src中拷贝到dest中
返回值
dest
特点
可以处理src和dest有内存重叠的情况(overlapping regions)
处理的方式就是判断有没有重叠的部分,有的话就从后往前拷贝
代码原型
char* m_memmove(char* dest, const char* src, int n)
{
char* p=dest;
if (src+n>p && src<p ) //有重叠
for(int i=1;i<n+1;i++)
*(p+n-i)=*(src+n-i);
else //没有重叠
{
while (n)
{
*p=*src;
src++;
p++;
n--;
}
}
return dest;
}
字符串比较函数
1 strcmp
函数原型
int strcmp( const char *string1,const char *string2);
特点
不忽略大小写
2 strncmp
函数原型
int strncmp( const char *string1,const char *string2,size_t count );
特点
不忽略大小写
3 memcmp
函数原型
int memcmp( const void* buf1, const void*buf2, size_tcount);
特点
同strncmp差不多,但是具体的差别还需要进一步研究呀
int r = strncmp("1234","1234",7); //字符串为0退出,循环4次
int r2 = memcmp("1234","1234",7); //循环7次或者遇到不相等的时候退出。所以当比较的数大于字符串长度时候,不安全啊。
也可以理解,strncmp是字符串比较,所以可以用\0来判断,但是void*的就不好判断了。
4 strnicmp
函数原型
int strnicmp( const char *string1, const char *string2, size_t count ); |
特点
不区分大小写的比较