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