1. memcpy
#include <string.h>
void * memcpy ( void * dest , void * src, unsigned int count)
将源地址src指向内存区域的count个字节赋值到dest为起始地址的内存区域 src和dest所指内存区域不能重叠,函数返回指向dest的指针 注意,对象不能是简单的内存拷贝,例如C++中STL的字符串类型string,因为memcpy执行的是浅拷贝,只是简单的把第二个内存指向第一个内存的引用,而程序结束时,会对一块内存进行两次内存释放(析构函数)。C++ String 使用注意: memcpy
2. memset
#include <string.h>
void * memset ( void * buffer, char c, int count)
把buffer所指内存区域的前count个字节设置成字符c 返回指向buffer的指针 也适用于整数数组初始化为0或者-1,因为memset按照字节操作,有符号数的0为全0,有符号数的-1为全1,例如
int a[ 100 ] ;
memset ( a, 0 , sizeof ( a) ) ;
int b[ 1000 ] ;
memset ( b, - 1 , sizeof ( b) ) ;
3. strcpy
#include <string.h>
char * strcpy ( char * dest, char * src) ;
把src所指由NULL结束的字符串复制到dest所指的数组中 src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串 注意C语言中的字符数字以'\0'
结尾,所以src的末尾必须是'\0'
4. memcpy
#inclue<string.h>
int memcpy ( const void * buf1, const void * buf2, size_t count)
比较两个内存区域buf1和buf2连续count字节的字符级别比较结果,即
int memcmp ( const void * cs, const void * ct, size_t count)
{
const unsigned char * su1, * su2;
int res = 0 ;
for ( su1 = cs, su2 = ct; 0 < count; ++ su1, ++ su2, count-- )
if ( ( res = * su1 - * su2) != 0 )
break ;
return res;
}
返回值 意义 < 0 buf1 less than buf2 0 buf1 identical to buf2 > 0 buf1 greater than buf2
注意如果比较两个字符数组,则可能不会在\0
处停下来,而是要比较连续count个字符
5. strcmp
#include <string.h>
int strncmp ( const char * cs, const char * ct, size_t count)
比较两个字符数组连续count个字节的比较结果,可能会在短的那个数组的\0
处停止