C语言<string.h>常用函数整理

整理了string.h中常用的几个函数,仅供参考!
1、strcpy()
2、memcpy()
3、strcat()
4、strchr()
5、strstr()
6、strcmp()
7、memcmp()
8、strset()
9、memset()

声明头文件
#include <string.h>

函数名:strcpy()

功能 :拷贝一个字符串到另一个
函数原型:char *strcpy(char *dest, const char *src)
参数介绍:
dest – 指向用于存储复制内容的目标数组
src – 要复制的字符串
返回值:返回一个指向最终的目标字符串 dest 的指针
程序例程:

#include <stdio.h>
#include <string.h>
int main()
{
   char string[10];
   char *str1 = "abcdefghi";

   strcpy(string, str1);
   printf("%s\n", string);
   return 0;
}
//运行结果:abcdefghi;

函数名:memcpy()

功能 :从存储区 str2 复制 n 个字节到存储区 str1
函数原型:void *memcpy(void str1, const void str2, size_t n)
参数介绍:
str1 – 指向用于存储复制内容的目标数组,类型强制转换为 void
指针。
str2 – 指向要复制的数据源,类型强制转换为 void
指针。
n – 要被复制的字节数。
返回值:返返回一个指向目标存储区 str1 的指针
程序例程:

#include<stdio.h>
#include<string.h>
 
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可以进行字符串复制,但是是整体复制,会覆盖原有的字符串内容
函数名:

strcat()

功能 :
用来将两个字符串连接(拼接)起来
函数原型:
charstrcat(char s1, const char* s2)
把s2加到s1后面
参数介绍:
s1:目的字符串,数组包含了一个 C 字符串,且足够容纳追加后的字符串
s2:源字符串。指向要追加的字符串,该字符串不会覆盖目标字符串。
返回值:
返回一个指向最终的目标字符串 s1的指针
程序例程:

#include <string.h>
#include <stdio.h>

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!

函数名:

strchr()

功能 :
检索字符串中第一次出现目标字符的位置
函数原型:
char *strchr(const char *str, char c)
参数介绍:
str – 要被检索的字符串
c – 在 str 中要搜索的字符
返回值:
返回在字符串 str 中第一次出现字符 c 的位置,如果未找到该字符则返回 NULL
程序例程:

#include <string.h>
#include <stdio.h>

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*/

函数名:

strstr()

功能 :
用于判断字符串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

函数名:

strcmp()

函数原型:
int strcmp(char *str1, char *str2)
功能 :
比较两个字符串,str1>str2,返回值 > 0;str1 = str2,返回0
str1 < str2,返回值<0;
参数介绍:
str1: 比较的字符串1
str2:比较的字符串2
返回值:
返回值为整形
程序例程:

#include <stdio.h>
#include <string.h>
 
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

函数名:

memcmp()

函数原型:
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 <stdio.h>
#include <string.h>
 
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  

函数名:

strset()

函数原型:
char *strset(char *str, char c)
功能 :
将一个字符串中的所有字符都设为指定字符
参数介绍:
str:字符串
c : 指定字符
返回值:
返回一个指向最终的目标字符串 str的指针
程序例程:

#include <stdio.h>
#include <string.h>

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

函数名:

memset()

函数原型:
void *memset(void *str, int c, size_t n)
功能 :
复制字符C到参数 str 所指向的字符串的前 n 个字符
参数介绍:
str – 指向要填充的内存块。
c – 要被设置的值。该值以 int 形式传递,但是函数在填充内存块时是使用该值的无符号字符形式。
n – 要被设置为该值的字符数。
返回值:
该值返回一个指向存储区 str 的指针
程序例程:

#include<stdio.h>
#include <string.h>
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

生命不息,战斗不止!
在这里插入图片描述

加油!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值