c 内存小函数

1.

相关函数:bzero, swab

头文件:#include <string.h>

定义函数:void * memset(void *s, int c, size_t n);

函数说明:memset()会将参数s 所指的内存区域前n 个字节以参数c 填入, 然后返回指向s 的指针. 在编写程序时, 若需要将某一数组作初始化, memset()会相当方便.

返回值:返回指向s 的指针.

附加说明:参数 c 虽声明为int, 但必须是unsigned char, 所以范围在0 到255 之间.

范例
#include <string.h>
main()
{
char s[30];
memset (s, 'A', sizeof(s));
s[30] = '\0';
printf("%s\n", s);
}

执行结果:
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA


2.相关函数:bcopy, memccpy, memcpy, strcpy, strncpy

头文件:#include <string.h>

定义函数:void * memmove(void *dest, const void *src, size_t n);

函数说明:memmove()与memcpy()一样都是用来拷贝src 所指的内存内容前n 个字节到dest 所指的地址上. 不同的是, 当src 和dest 所指的内存区域重叠时, memmove()仍然可以正确的处理, 不过执行效率上会比使用memcpy()略慢些.

返回值:返回指向dest 的指针.

附加说明:指针 src 和dest 所指的内存区域可以重叠.


3.相关函数:bcopy, memccpy, memcpy, memmove, strcpy, strncpy

头文件:#include <string.h>

定义函数:void * memcpy (void * dest, const void *src, size_t n);

函数说明:memcpy()用来拷贝src 所指的内存内容前n 个字节到dest 所指的内存地址上. 与strcpy()不同的是, memcpy()会完整的复制n 个字节, 不会因为遇到字符串结束'\0'而结束.

返回值:返回指向dest 的指针.

附加说明:指针 src 和dest 所指的内存区域不可重叠.

范例
#include <string.h>
main()
{
    char a[30] = "string (a)";
    char b[30] = "string\0string";
    int i;
    strcpy(a, b);
    printf("strcpy():");

    for(i = 0; i < 30; i++)
        printf("%c", a[i]);

    memcpy(a, b, 30);
    printf("\nmemcpy() :");

    for(i = 0; i < 30; i++)
        printf("%c", a[i]);
}
执行结果:
strcpy() : string (a)
memcpy() : string string


4.

相关函数:bcmp, strcasecmp, strcmp, strcoll, strncmp, strncasecmp

头文件:#include <string.h>

定义函数:int memcmp (const void *s1, const void *s2, size_t n);

函数说明:
memcmp()用来比较s1 和s2 所指的内存区间前n 个字符. 字符串大小的比较是以ASCII 码表上的顺序来决定, 次顺序亦为字符的值. memcmp()首先将s1 第一个字符值减去s2 第一个字符的值, 若差为0 则再继续比较下个字符, 若差值不为0 则将差值返回. 例如, 字符串"Ac"和"ba"比较则会返回字符'A'(65)和'b'(98)的差值(-33).


返回值:若参数s1 和s2 所指的内存内容都完全相同则返回0 值. s1 若大于s2 则返回大于0 的值. s1 若小于s2 则返回小于0 的值.

范例
#include <string.h>
main()
{
    char *a = "aBcDeF";
    char *b = "AbCdEf";
    char *c = "aacdef";
    char *d = "aBcDeF";
    printf("memcmp(a, b):%d\n", memcmp((void*)a, (void*)b, 6));
    printf("memcmp(a, c):%d\n", memcmp((void*)a, (void*)c, 6));
    printf("memcmp(a, d):%d\n", memcmp((void*)a, (void*)d, 6));
}

执行结果:
memcmp(a, b):1 //字符串a>字符串b, 返回1
memcmp(a, c):-1 // 字符串a<字符串c, 返回-1
memcmp(a, d):0 //字符串a=字符串d, 返回0


5


相关函数:index, rindex, strchr, strpbrk, strrchr, strsep, strspn, strstr

头文件:#include <string.h>

定义函数:void * memchr(const void *s, int c, size_t n);

函数说明:memchr()从头开始搜寻s 所指的内存内容前n 个字节, 直到发现第一个值为c 的字节, 则返回指向该字节的指针.

返回值:如果找到指定的字节则返回该字节的指针, 否则返回0.

范例
#include <string.h>
main()
{
    char *s = "0123456789012345678901234567890";
    char *p;
    p = memchr(s, '5', 10);
    printf("%s\n", p);
}

执行结果:
5.68E+25

6

相关函数:bcopy, memcpy, memmove, strcpy, strncpy

头文件:#include <string.h>

定义函数:void * memccpy(void *dest, const void * src, int c, size_t n);

函数说明:memccpy()用来拷贝src 所指的内存内容前n 个字节到dest 所指的地址上. 与memcpy()不同的是,memccpy()会在复制时检查参数c 是否出现, 若是则返回dest 中值为c 的下一个字节地址.

返回值:返回指向dest 中值为c 的下一个字节指针. 返回值为0 表示在src 所指内存前n 个字节中没有值为c的字节.

范例
#include <string.h>
main()
{
    char a[] = "string[a]";
    char b[] = "string(b)";
    memccpy(a, b, 'B', sizeof(b));
    printf("memccpy():%s\n", a);
}

执行结果:
memccpy():string(b)


相关函数:memset, swab

头文件:#include <string.h>

定义函数:void bzero(void *s, int n);

函数说明:bzero()会将参数s 所指的内存区域前n 个字节, 全部设为零值. 相当于调用memset((void*)s, 0,size_tn);

附加说明:建议使用 memset 取代


范例 参考memset().


8


相关函数:memccpy, memcpy, memmove, strcpy, ctrncpy

头文件:#include <string.h>

定义函数:void bcopy(const void *src, void *dest, int n);

函数说明:bcopy()与memcpy()一样都是用来拷贝src 所指的内存内容前n 个字节到dest 所指的地址, 不过参数src 与dest 在传给函数时是相反的位置.

附加说明:建议使用 memcpy()取代


范例
#include <string.h>
main()
{
    char dest[30] = "string(a)";
    char src[30] = "string\0string";
    int i;
    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 string
memcpy() :string sring




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值