整理了string.h中常用的几个函数,仅供参考!
1、strcpy()
2、memcpy()
3、strcat()
4、strchr()
5、strstr()
6、strcmp()
7、memcmp()
8、strset()
9、memset()
声明头文件
#include
功能 :拷贝一个字符串到另一个
函数原型:char *strcpy(char *dest, const char *src)
参数介绍:
dest – 指向用于存储复制内容的目标数组
src – 要复制的字符串
返回值:返回一个指向最终的目标字符串 dest 的指针
程序例程:
#include
#include
int main()
{
char string[10];
char *str1 = "abcdefghi";
strcpy(string, str1);
printf("%s\n", string);
return 0;
}
//运行结果:abcdefghi;
功能 :从存储区 str2 复制 n 个字节到存储区 str1
函数原型:void *memcpy(void str1, const void str2, size_t n)
参数介绍:
str1 – 指向用于存储复制内容的目标数组,类型强制转换为 void 指针。
str2 – 指向要复制的数据源,类型强制转换为 void 指针。
n – 要被复制的字节数。
返回值:返返回一个指向目标存储区 str1 的指针
程序例程:
#include
#include
int main(void)
{
char src[] = "***";
char dest[] = "kangkang";
printf("使用 memcpy 前: %s\n", dest);
memcpy(dest, src, strlen(src));
printf("使用 memcpy 后: %s\n", dest);
memcpy(dest+8, src, strlen(src));
printf("改变地址后: %s\n", dest);
return 0;
}
运行结果:
使用 memcpy 前: kangkang
使用 memcpy 后: ***gkang
改变地址后: ***gkang***
strcpy与memcpy的区别:
memcpy可以指定字节数进行复制,复制到存储的数组中只会覆盖复制字节长度的字符
strcpy可以进行字符串复制,但是是整体复制,会覆盖原有的字符串内容
函数名:
功能 :
用来将两个字符串连接(拼接)起来
函数原型:
charstrcat(char s1, const char* s2)
把s2加到s1后面
参数介绍:
s1:目的字符串,数组包含了一个 C 字符串,且足够容纳追加后的字符串
s2:源字符串。指向要追加的字符串,该字符串不会覆盖目标字符串。
返回值:
返回一个指向最终的目标字符串 s1的指针
程序例程:
#include
#include
int main(void)
{
char s1[50];//定义一个空数组
const char *s2= "A "; //定义想要追加的内容
const char *s22 = "kang ";//const保证字符串常量不被改变
const char *s222= "love studay!";//不加const会警告
strcpy(s1, s2);
strcat(s1, s22);
strcat(s1, s222);
printf("%s\n", s1);
return 0;
}
//运行结果:A kang love studay!
函数名:
功能 :
检索字符串中第一次出现目标字符的位置
函数原型:
char *strchr(const char *str, char c)
参数介绍:
str – 要被检索的字符串
c – 在 str 中要搜索的字符
返回值:
返回在字符串 str 中第一次出现字符 c 的位置,如果未找到该字符则返回 NULL
程序例程:
#include
#include
int main(void)
{
char string[50];//保证数组足够大
char *ptr, c = 'i';
strcpy(string, "DeMaXiYa");//复制过去
ptr = strchr(string, c);//检索
printf("%p\n",string);//打印字符串初始地址
printf("%p\n",ptr);//打印字符出现的地址
if (ptr)
{
printf("%c 在第%d的位置\n", c, ptr-string);
printf("%c 后面的字符串%s\n", c, ptr+1);//把i的长度加上
}
else
printf("The character was not found\n");
return 0;
}
/* 运行结果:
000000000062FE00
000000000062FE05 地址0————5
i 在第5的位置
i 后面的字符串Ya*/
函数名:
功能 :
用于判断字符串str2是否是str1的子串
函数原型:
char *strstr(const char *str1, const char *str2)
参数介绍:
str1 – 要被检索的字符串
str2-- 在 str1 中要搜索的字符
返回值:
如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。
程序例程:
int main()
{
const char father[50] = "AiOuNiYa,AngYangBuMie";
const char son[50] = "AngYangBuMie";
char *p;
p = strstr(father, son);
printf("子字符串是: %s\n", p);
printf("%p\n",&father[9]);
printf("%p\n",p);
return(0);
}
//打印结果:子字符串是:
子字符串是: AngYangBuMie
数组中地址: 000000000062FDA9
返回p 地址: 000000000062FDA9
函数名:
函数原型:
int strcmp(char *str1, char *str2)
功能 :
比较两个字符串,str1>str2,返回值 > 0;str1 = str2,返回0
str1 < str2,返回值<0;
参数介绍:
str1: 比较的字符串1
str2:比较的字符串2
返回值:
返回值为整形
程序例程:
#include
#include
int main ()
{
char str1[15];
char str2[15];
int ret;
strcpy(str1, "qwerdf");
strcpy(str2, "QWERDF");
ret = strcmp(str1, str2);
if(ret < 0)
printf("str1 小于 str2");
else if(ret > 0)
printf("str1 大于 str2");
else
printf("str1 等于 str2");
return 0;
}
//运行结果:str1 大于 str2
函数名:
函数原型:
int memcmp(const void *str1, const void *str2, size_t n)
功能 :
把存储区 str1 和存储区 str2 的前 n 个字节进行比较
参数介绍:
str1 – 指向内存块的指针。
str2 – 指向内存块的指针。
n – 要被比较的字节数。
返回值:
返回值为整形
如果返回值 < 0,则表示 str1 小于 str2。
如果返回值 > 0,则表示 str2 小于 str1。
如果返回值 = 0,则表示 str1 等于 str2。
程序例程:
#include
#include
int main ()
{
char str1[15];
char str2[15];
int ret;
memcpy(str1, "qwerdf",6);
memcpy(str2, "QWERDF",6);
ret = memcmp(str1, str2,5);
if(ret < 0)
printf("str1 小于 str2");
else if(ret > 0)
printf("str1 大于 str2");
else
printf("str1 等于 str2");
return 0;
}
//运行结果:str1 大于 str2
函数名:
函数原型:
char *strset(char *str, char c)
功能 :
将一个字符串中的所有字符都设为指定字符
参数介绍:
str:字符串
c : 指定字符
返回值:
返回一个指向最终的目标字符串 str的指针
程序例程:
#include
#include
int main(void)
{
char str[10] = "6666666";
char set = 'c';
printf("Before strset(): %s\n", str);
strset(str, set);
printf("After strset(): %s\n", str);
return 0;
}
//运行结果:
Before strset(): 6666666
After strset(): ccccccc
函数名:
函数原型:
void *memset(void *str, int c, size_t n)
功能 :
复制字符C到参数 str 所指向的字符串的前 n 个字符
参数介绍:
str – 指向要填充的内存块。
c – 要被设置的值。该值以 int 形式传递,但是函数在填充内存块时是使用该值的无符号字符形式。
n – 要被设置为该值的字符数。
返回值:
该值返回一个指向存储区 str 的指针
程序例程:
#include
#include
int main()
{
char buf[1024] = {0};//定义一个数组
int i=0;
for(i=0;i<=10;i++)
{
sprintf(buf,"当前计数值为:%d!", i);//把i传进前面的字符串,i值一直变化,形成字符动态的显示(计数)
printf("%s\n",buf);
}
const char *s1 = "Akang ";
const char *s2 = "love lining";
memset(buf,0,1024);//把buf全部初始化为0;
sprintf(buf,"%s%s",s1,s2);//拼接,把s1s2格式化输出,存到buf中
printf("%s\n",buf);
char str[50];
strcpy(str,"STM32");
memset(str,'+',3);//把+++复制到str前三个字符;我理解为把str前三个字符设置为+++
printf("%s\n",str);
}
//sprintf的返回值是字符数组中字符的个数,即字符串的长度,不用在调用strlen(str)求字符串的长度。
//运行结果:
当前计数值为:0!
当前计数值为:1!
当前计数值为:2!
当前计数值为:3!
当前计数值为:4!
当前计数值为:5!
当前计数值为:6!
当前计数值为:7!
当前计数值为:8!
当前计数值为:9!
当前计数值为:10!
Akang love lining
+++32
加油!