现在的位置: 首页 > 综合 > 正文

c语言 字符串函数

2012年09月06日 ⁄ 综合 ⁄ 共 1683字 ⁄ 字号 评论关闭

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 
);

特点

不区分大小写的比较

 

 

抱歉!评论已关闭.