首页 > 代码库 > C语言<memory.h>和<string.h>头文件中的函数
C语言<memory.h>和<string.h>头文件中的函数
C语言<memory.h>和<string.h>头文件中的函数
2014年9月29日
- strcpy
原型:extern char *strcpy(char * dest, char * src);
用法:#include
功能:把src所指由NULL结束的字符串复制到dest所指的数组中。
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针。
- #include<stdio.h>
- #include<string.h>
- int main(void){
- charstring[10];
- char*str1="abcdefghi";
- strcpy(string,str1);
- printf("%s\n",string);
- return0;
- }
- memcpy
原型:extern void *memcpy(void *dest, void *src, unsigned int count);
头文件:<memory.h>
功能:由src所指内存区域复制count个字节到dest所指内存区域。
说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针。
memcpy会存在一个问题,就是如果出现dest是否与src重合,那么就内存的后半段就会被前半段复制过来的内容覆盖。事实上,编译器会对这种情况进行检测,并报错。而某些编译器,比如"gcc和VS会对这种情况直接调用memmove函数"(来源:http://bbs.csdn.net/topics/380234075)。举例如下:
- #include <memory.h>
- #include <string.h>
- #include <stdio.h>
- #include <stdlib.h>
- int main(){
- char *a = "abcdef";
- // char *b = (char*)malloc(strlen(a));
- char *b = a + 2;
- printf("%s\n%s\n", a, b);
- memcpy(b, a, strlen(a));
- printf("%s\n%s\n", a, b);
- // free(b);
- return 0;
- }
VC++下运行会产生运行时错误并崩溃。
- memmove
原型:void *memmove( void* dest, const void* src, size_t count );
功能:由src所指内存区域复制count个字节到dest所指内存区域。
相关函数:memset、memcpy
- memset
原型:extern void *memset(void *buffer, int c, int count);
功能:把buffer所指内存区域的前count个字节设置成字符c。
说明:返回指向buffer的指针。
- strncpy
原型:char *strncpy(char *dest, char *src,size_tn);
功能:将字符串src中最多n个字符复制到字符数组dest中(它并不像strcpy一样遇到NULL才停止复制,而是等凑够n个字符才开始复制),返回指向dest的指针。
- strcat
原型: char *strcat(char *destin, char *source);
功能: 字符串拼接函数
示例:
- #include <memory.h>
- #include <string.h>
- #include <stdio.h>
- #include <stdlib.h>
- int main()
- {
- char destination[25];
- char*blank="",*c="C++",*Borland="Borland";
- strcpy(destination, Borland);
- strcat(destination, blank);
- strcat(destination, c);
- printf("%s\n", destination);
- return 0;
- }
程序最终输出"Borland C++"
- strchr
原型: char *strchr(char *str, char c);
功能: 在一个串中查找给定字符的第一个匹配处的指针
程序例:
- int main(void)
- {
- char str [15];
- char *ptr,c = ‘r‘;
- strcpy(str,"This is a string");
- ptr = strchr(str,c);
- if(ptr)
- printf("The character %c is at position: %d\n", c, ptr - str);
- else
- printf("The character was not found\n");
- return 0;
- }
程序运行结果为"The character r is at position: 12"
- strcmp
原型: int strcmp(char *str1, char *str2);
功能: 串比较
看ASCII码,str1>str2,返回值 > 0;两串相等,返回0
程序例:
- int main(void)
- {
- char*buf1="aba",*buf2="abb",*buf3="abc";
- int ptr;
- ptr=strcmp(buf2,buf1);
- if(ptr>0)
- printf("buffer2 is greater than buffer1\n");
- else
- printf("buffer2 is less than buffer1\n");
- ptr=strcmp(buf2,buf3);
- if(ptr>0)
- printf("buffer2 is greater than buffer3\n");
- else
- printf("buffer2 is less than buffer3\n");
- return 0;
- }
程序执行结果是:
buffer2 is greater than buffer1
buffer2 is less than buffer3
- strlen
原型: size_t strlen(const char *s);
功能: strlen函数求的是字符串的长度,它求得方法是从字符串的首地址开始到遇到第一个‘\0‘停止计数,如果你只定义没有给它赋初值,这个结果是不定的,它会从字符串首地址一直记下去,直到遇到‘\0‘才会停止。
程序示例:
- int main()
- {
- char *he= "Hello,world";
- printf("字符串长度为%d\n",strlen(he));
- return 0;
- }
运行结果:
字符串长度为11
- strdup
原型:char *strdup(char *str);
功能:将串拷贝到新建的位置处
程序示例:
- int main(void)
- {
- char*dup_str,*string="abcde";
- dup_str=strdup(string);
- printf("%s\n",dup_str);
- free(dup_str);
- return 0;
- }
程序运行结果为:"abcde"
- strncmp
原型: int strncmp(char *str1, char *str2, int maxlen);
功能: 比较由前maxlen个字符构成的子串的大小。
程序例:
- int main(void)
- {
- char*buf1="aaabbb",*buf2="bbbccc",*buf3="ccc";
- int ptr;
- ptr=strncmp(buf2,buf1,3);
- if(ptr>0)
- printf("buffer2 is greater than buffer1\n");
- else
- printf("buffer2 is less than buffer1\n");
- ptr=strncmp(buf2,buf3,3);
- if(ptr>0)
- printf("buffer2 isgreater than buffer3\n");
- else
- printf("buffer2 is less than buffer3\n");
- return 0;
- }
程序执行结果是:
buffer2 is greater than buffer1
buffer2 is less than buffer3
- strpbrk
原型: char *strpbrk(char *origin, char *charset);
功能: 在串中查找给定字符集中的字符,返回出现的第一个字符
程序例:
- int main(void)
- {
- char* string1="abcdefghijklmnopqrstuvwxyz";
- char* string2="onm";
- char* ptr;
- ptr=strpbrk(string1, string2);
- if(ptr)
- printf("strpbrk found first character: %c\n",*ptr);
- else
- printf("strpbrk didn‘t find character in set\n");
- return 0;
- }
程序运行结果为"strpbrk found first character: m"
- strrchr
原型: char *strrchr(char *str, char c);
功能: 在串中查找指定字符的最后一次出现
- strrev
原型: char *strrev(char *str);
功能: 串倒转,以‘\0‘为结束
程序示例:
- int main(void)
- {
- char* forward= {"string"};
- printf("Before strrev(): %s\n", forward);
- char* reverse = strrev(strdup(forward));
- printf("After strrev(): %s\n", reverse);
- return 0;
- }
注意,一定要使用strdup函数才能进行反转。
程序运行结果:
Before strrev(): string
After strrev(): gnirts
- strstr
原型: char *strstr(char *str1, char *str2);
功能: 在串中查找指定字符串的第一次出现,返回指向第一次出现位置的指针。如果没找到则返回NULL。
程序示例:
- int main(void)
- {
- char*str1="BorlandInternational", *str2="nation", *ptr;
- ptr = strstr(str1,str2);
- printf("Thesubstringis:%s\n",ptr);
- return 0;
- }
输出为:The sub string is: national
- strtok
原型: char *strtok(char *str1, char *str2);
功能: 查找由在第二个串中指定的分界符分隔开的单词
程序示例:
- int main(void)
- {
- char input[16]="abc,def";
- char*p;
- /*strtok places a NULL terminator
- in front of the token,if found*/
- p=strtok(input,",");
- if(p)
- printf("%s\n",p);
- /*A second call to strtok using a NULL
- as the first parameter returns a pointer
- to the character following the token*/
- p=strtok(NULL,",");
- if(p)
- printf("%s\n",p);
- return 0;
- }
程序输出结果:
abc
def
- swab
原型: void swab (char *from, char *to, int nbytes);
功能: 交换字符串内相邻的两个字节,如果是偶数个字符,长度不变;如果是奇数个字符,则长度要减小1,因为最后一个字符和字符串结束标志‘\0‘做了交换。
程序示例:
- char source1[15]="rFnakoBlrnad";
- char source2[15]="rFnakoBlrna";
- char target1[15] ,target2[15];
- int main(void)
- {
- swab(source1, target1, strlen(source1));
- printf("This is target:%s\n",target1);
- swab(source2, target2, strlen(source2));
- printf("This is target:%s\n",target2);
- return 0;
- }
程序输入结果:
This is target:FranoklBnrda
This is target:FranoklBnr
C语言<memory.h>和<string.h>头文件中的函数