- 函数介绍
memccpy(拷贝内存内容) | |
相关函数 | 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> |
执行 | memccpy():string(b) |
| |
相关函数 | 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> |
执行 | 5.68E+25 |
| |
相关函数 | 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> |
执行 | memcmp(a,b):1 /*字符串a>字符串b,返回1*/ |
| |
相关函数 | 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个字节,不会因为遇到字符串结束' '而结束。 |
返回值 | 返回指向dest的指针。 |
附加说明 | 指针src和dest所指的内存区域不可重叠。 |
范例 | #include<string.h> |
执行 | strcpy() : string a ) |
| |
相关函数 | 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所指的内存区域可以重叠。 |
范例 | 参考memcpy()。 |
| |
相关函数 | 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> |
执行 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA |
- 小试
流程设置:
源代码实现:
#include <stdio.h> #include <ctype.h> #include <string.h> #include <stdlib.h> int main(void) { // //作为输入缓冲区 char buffer[32]; long int res; //分配两指针 后面利用这两个指针进行遍历操作 char *q,*r; //malloc先分配一段内存p char *p = (char *)malloc(10*sizeof(char)); printf("申请内存成功 请输入带有数字的字符串 "); scanf("%s",buffer); //memset清零 memset(p,0,10); printf("memset清零 "); //memcpy 拷贝我们输入缓冲区的数字字符进p q = p; r = buffer; while(r || q) { if(*r == ' ' ) break; if(isdigit(*r)) //isdigit(测试字符是否为阿拉伯数字) { //void * memmove(void *dest,const void *src,size_t n); memcpy(q,r,sizeof(char)); printf("找到了一个字符并拷贝了 "); q++; } r++; } //atol转化成一个长整形数 并输出 long atol(const char *nptr); res = atol(p); printf("转化后的数字是%ld ",res); free(p); printf("释放内存成功 "); return 0; }
查找一下atol的头文件
- 各平台的运行情况
在RHEL7上
在RHEL6上
在Solaris11上
在mac上