C语言中字符串的内存地址操作的相关函数简介
C语言bcopy()函数:复制内存(字符串)
头文件:
#include<string.h>
bcopy()函数用来复制内存(字符串),其原型为:
voidbcopy(constvoid*src,void*dest,intn);
【参数】src为源内存块(字符串)指针,dest为目标内存块(字符串)指针,n为要复制的内存(字符串)的前n个字节长度。
bcopy()与memcpy()一样都是用来拷贝src所指的内存内容前n个字节到dest所指的地址,不过参数src与dest在传给函数时是相反的位置。
bcopy()不检查内存(字符串)中的空字节NULL。
实际上,bcopy()和memcpy()功能相同,用来复制内存块的前n个字节,但是s1,s2两个参数为指针,又很奇怪的位于string.h文件中,所以也可以用来复制字符串。
注意:bcopy()不是标准函数,没有在ANSI中定义,笔者在VC6.0和MinGW5下编译没通过;据称Linux下的GCC支持,不过笔者没有亲测。鉴于此,还是使用memcpy()替代吧。
更多信息请查看:C语言bcopy()和memcpy()、bzero()和memset()、bcmp()和memcmp()几个函数的差别
笔者定义了一个宏,在VC6.0下编译通过,代码如下:
#include<stdio.h> #include<string.h> #definebcopy(a,b,c)memcpy(a,b,c) main(){ chardest[30]="string(a)"; charsrc[30]="string\0string"; inti; bcopy(src,dest,30);//src指针放在前 printf("bcopy():"); for(i=0;i<30;i++) printf("%c",dest[i]); memcpy(dest,src,30);//dest指针放在钱 printf("\nmemcpy():"); for(i=0;i<30;i++) printf("%c",dest[i]); }
执行结果:
bcopy():string(a) memcpy():string(a)
C语言bzero()函数:将内存(字符串)前n个字节清零
头文件:
#include<string.h>
bzero()会将内存块(字符串)的前n个字节清零,其原型为:
voidbzero(void*s,intn);
【参数】s为内存(字符串)指针,n为需要清零的字节数。
bzero()会将参数s所指的内存区域前n个字节,全部设为零值。
实际上,bzero(void*s,intn)等价于memset((void*)s,0,size_tn),用来将内存块的前n个字节清零,但是s参数为指针,又很奇怪的位于string.h文件中,也可以用来清零字符串。
注意:bzero()不是标准函数,没有在ANSI中定义,笔者在VC6.0和MinGW5下编译没通过;据称Linux下的GCC支持,不过笔者没有亲测。鉴于此,还是使用memset()替代吧。
C语言bcmp()函数:比较内存(字符串)的前n个字节是否相等
头文件:
#include<string.h>
bcmp()比较内存(字符串)的前n个字节是否相等,其原型为:
intbcmp(constvoid*s1,constvoid*s2,intn);
【参数】s1,s2为需要比较的两块内存(或两个字符串),n为要比较的长度。
【返回值】如果s1,s2的前n个字节相等或者n等于0,则返回0,否则返回非0值。
bcmp()函数不检查NULL。
实际上,bcmp()和memcmp()功能相同,用来比较内存块的前n个字节是否相等,但是s1,s2两个参数为指针,又很奇怪的位于string.h文件中,也可以用来比较字符串。
注意:bcmp()不是标准函数,没有在ANSI中定义,笔者在VC6.0和MinGW5下编译没通过;据称Linux下的GCC支持,不过笔者没有亲测。鉴于此,还是使用memcmp()替代吧。
勉为其难的举个例子吧:
复制纯文本新窗口
#include<stdio.h> #include<string.h> intmain() { char*s1="GoldenGlobalView"; char*s2="GoldenGlobalView"; if(!bcmp(s1,s2,7)) printf("s1equaltos2infirst7bytes"); else printf("s1notequaltos2infirst7bytes"); return0; }