memmove
扫描二维码
随时随地手机看文章
相关函数: bcopy(), memccpy(),
memcpy(), strcpy(), strncpy()
表头文件: #include
贴个VC下的源码看看:
void * __cdecl memmove ( void * dst, const void * src, size_t count )
{
void * ret = dst;
if (dst
memmove(拷贝内存内容)
相关函数 bcopy,memccpy,memcpy,strcpy,strncpy
表头文件 #include
定义函数 void * memmove(void *dest,const void *src,size_t n);
函数说明 memmove()与memcpy()一样都是用来拷贝src 所指的内存内容前n 个字节到dest 所指
的地址上。不同的是,当src 和dest 所指的内存区域重叠时,memmove()仍然可以正确
的处理,不过执行效率上会比使用memcpy()略慢些。
返 回 值 返回指向dest 的指针。
附加说明 指针src 和dest 所指的内存区域可以重叠。
*/
#if 1
#include
//using namespace std::cout; //error C2867: 'std::cout' : is not a namespace
//using namespace std::endl; //error C2867: 'std::endl' : is not a namespace
using namespace std;
void main()
{
void *s = "ddddddddd ddddd";
//char str1[20] = "asdfghjkldasdfghjkl";
char str1[20] = "asdfghjkldasdf";
//char str2[20] = '0' ; //error C2440: 'initializing' : cannot convert from 'const char' to 'char [20]'
//char str2[20] = {} ;//{0} ; //error
char str2[20] = {0} ; //字符数组初始化为空 char a[4] = {0} ; char a[4] == "0"如果定义一个字符数
组,却没有初始化,则数组输出乱麻
//void *memmove(void *,const void *,size_t)
cout<<"copy from s to str1 "<<endl;
memmove(str1,s,strlen((char *)s)); //遇到空格继续 ,字符指针---〉字符数组
cout<<"str1 is "<<str1<<endl;
memmove(str2,str1,strlen(str1)); //字符数组-----〉字符数组
cout<<"str2 is "<<str2<<endl;
cout <<"copy from str1 to s ,lenght is strlen(str1) "<<endl;
//memmove(s,str1,strlen(str1));
//字符数组----〉字符指针 运行时显示工程出现问题,需要关闭
//memmove(s,(void *)str1,strlen(str1)); //字符数组----〉字符指针 运行时显示工程出现问题,需要关闭
cout<<"s is "<<s<<endl;
cout<<"(char *)s is "<<(char *)s<<endl;
//memmove(s,str1,sizeof(str1));
//cout<<"s is "<<s<<endl;
}
/*
输出结果:
copy from s to str1
str1 is ddddddddd ddddd
str2 is ddddddddd ddddd
copy from str1 to s ,lenght is strlen(str1)
s is 0046F0C0
(char *)s is ddddddddd ddddd
*/
/*
把一个字符数组清空的最快的办法是把他的第一个字符的值设为0。
也就是 a[0]=0;
a[0]=' ';
a[0]=NULL;
如何判断一个字符数组是空数组
char aaa[10];
if((aaa[0]==' ') || strlen(aaa)==0)
{
//为空
}
*/
#endif