c语言中memory.h有什么作用,C语言<memory.h>和<string.h>头文件中的函数

C语言和头文件中的函数

2014年9月29日

strcpy

原型:extern char *strcpy(char * dest, char * src);

用法:#include

功能:把src所指由NULL结束的字符串复制到dest所指的数组中。

说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。

返回指向dest的指针。

#include

#include

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);

头文件:

功能:由src所指内存区域复制count个字节到dest所指内存区域。

说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针。

memcpy会存在一个问题,就是如果出现dest是否与src重合,那么就内存的后半段就会被前半段复制过来的内容覆盖。事实上,编译器会对这种情况进行检测,并报错。而某些编译器,比如"gcc和VS会对这种情况直接调用memmove函数"(来源:http://bbs.csdn.net/topics/380234075)。举例如下:

#include

#include

#include

#include

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

#include

#include

#include

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

原文:http://www.cnblogs.com/superpig0501/p/3999789.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值