【c语言】<string.h>头文件中所有函数详解

目录

一 . str开头

1. strcpy()

2. strcpy()

3. strcat()

4. strncat()

5. strcmp()

6. strncmp()

7. strchr()

8. strrchr()

9. strcspn()

10. strspn()

11. strpbrk()

12. strstr()

13. strlen()

14. strerror()

15. strtok()

二. mem开头

1. memcpy()

2. memcmp()

3. memchr()

4. memset()

5. memmove()


头文件<string.h>中有两大类字符串函数。一类为str开头的函数,一类men开头的函数。men开头的函数,效率会更高一些。

参数中 size_t 是一种无符号整数类型,确保不会出现负数。


一 . str开头

1. strcpy()

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

功能:src指向的字符 复制到dest中

返回:dest

#include<stdio.h>
#include<string.h>
int main(void)
{
	char desn[10];	
	char* source="hello world!";
	strcpy(desn,source);
	printf("源字符串  :%s\n",source);
	printf("目标字符串:%s\n",desn);
	return 0;
}

结果:

2. strcpy()

原型:char * strncpy(char *dest, char *src, size_t  maxsize)

功能:src指向的字符 复制到dest中,并返回dest,限制最大字符串长度 maxsize。当src中少于maxsize时,使用‘\0’填充。其中size_t是无符号整型,保证maxsize始终为正数。

返回: dest

示例:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
   char * src="hello,world!";
   char dest[20];
   strncpy(dest, src, 20);
  
   printf("源字符串  :%s\n",src);
   printf("目标字符串:%s\n",dest);
   system("pause");
   return(0);
}

运行结果:

3. strcat()

原型char *strcat(char *dest, const char *src)

功能:将字符串src 连接到dest的尾部。

返回: dest

示例:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
   char * src="world" ;
   char  dest[50] ="hello,"; /*目标字符串必须声明足够的长度,足够连接src字符串长度*/
  
   strcat(dest, src);
   printf("目标字符串:%s\n",dest);
   system("pause");
   return(0);
}

运行:

4. strncat()

原型char *strcat(char *dest, const char *src,size_t maxsize)

功能:将字符串src 最多前maxsize个字符 连接到dest的尾部。src中必须有字符串结束符'\0'

返回: dest

示例:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
   char * src="world" ;
   char  dest[50] ="hello,"; /*目标字符串必须声明足够的长度,足够连接src字符串长度*/
  
   strncat(dest, src,3);
   printf("目标字符串:%s\n",dest);
   system("pause");
   return(0);
}

运行:

5. strcmp()

原型char *cmp(const char *str1, const char *str2)

功能:比较字符串str1和str2

返回:  当str1<str2,返回值小于0

          当str1=str2,返回值等于0

          当str1>str2,返回值大于0

示例:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main3()
{
   char * str1  ="hello,world!" ;
   char * str2  ="hello,human!"; /*目标字符串必须声明足够的长度,足够连接src字符串长度*/
  
   int res= strcmp(str1, str2);
   if(res<0)
	 printf("str1小于str2");
   else if(res==0)
	 printf("str1等于str2");
   else
	 printf("str1大于str2");

   system("pause");
   return(0);
}

运行结果:

6. strncmp()

原型char *cmp(const char *str1, const char *str2,size_t maxsize)

功能:字符串str1中至多maxsize个字符与字符串str2比较

返回:  当str1<str2,返回值小于0

          当str1=str2,返回值等于0

          当str1>str2,返回值大于0

示例:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
   char * str1  ="hello,world!" ;
   char * str2  ="hello,human!"; /*目标字符串必须声明足够的长度,足够连接src字符串长度*/
  
   int res= strncmp(str1, str2,5);
   if(res<0)
	 printf("str1小于str2\n");
   else if(res==0)
	 printf("str1等于str2\n");
   else
	 printf("str1大于str2\n");

   system("pause");
   return(0);
}

运行结果:

7. strchr()

原型char *strchr(const char * src, int c)

功能:查找字符c在src中的第一次出现的位置

返回:  字符c在src中的第一次出现位置的指针

示例:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
   char * str  ="hello,world!" ;
  
   char * pos;
  
   pos= strchr(str, 'o');
   
   printf("\n 字符第一次出现的位置为第%d个(从0开始),内存地址为:0x%x\n", pos-str,pos );

   system("pause");
   return(0);
}

运行结果:

8. strrchr()

原型char * strrchr(const char * src, int c)

功能:查找字符c在src中的最后一次出现的位置

返回:  字符c在src中的最后一次出现位置的指针

示例:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
   char * str  ="hello,world!" ;
   char * pos;

   pos= strrchr(str, 'o');
   printf("\n 字符最后一次出现的位置为第%d个(从0开始),内存地址为:0x%x\n", pos-str,pos );

   system("pause");
   return(0);
}

运行结果:

9. strcspn()

原型:size_t strcspn(const char * str1, const char * str2)

功能:返回字符串 str1 中包含str2中字符的前缀的长度。或者可以理解为字符串 str1 中第一个在字符串 str2 中出现的字符下标 。直接看代码和运行结果,看完就明白了。

示例:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
   char * str1  ="world!" ;
   char * str2="jbgar"; 

   int len;
   len = strcspn(str1, str2);/*world中r在ar中出现了,它的下标是2*/

   printf("\nstr1中找到第一个在str2中出现的字母,它的下标为:%d\n", len);

   system("pause");
   return(0);
}

运行结果:

10. strspn()

原型:size_t strspn(const char * str1, const char * str2)

功能:返回字符串 str1 中不包含str2中字符的前缀的长度。或者可以理解为 查找字符串 str1 中第一个没有在字符串 str2 中出现的字符下标 。直接看代码和运行结果,看完就明白了。这个容易和strcspn()函数搞反,得格外注意。

示例:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
   char * str1  ="world!" ;
   char * str2="dewor"; 

   int len;
   len = strspn(str1, str2);/*world中l在是第一个没有在dewor中出现,它的下标是3*/

   printf("\nstr1中找到第一个没有在str2中出现的字母,它的下标为:%d\n", len);

   system("pause");
   return(0);
}

运行结果:

11. strpbrk()

原型char  *  strpbrk(const char * str1, const char * str2)

功能:查找str2的任意字符在str1中第一次出现的位置,并返回指向这个位置的指针

返回:  字符指针

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
   char * str1  ="world!" ;
   char * str2="glar"; 
   char * pos;

   pos = strpbrk(str1, str2);/*glar中的r是第一个在world中出现,将返回r的位置,
							 虽然glar中的l在world中也出现,但是它不是第一个在world中出现的*/

   printf("\nstr2的字符在str1中第一个出现的字母是%c,它在str1的下标为%d\n", *pos,pos-str1);

   system("pause");
   return(0);
}

运行结果:

12. strstr()

原型char  *  strstr(const char * str1, const char * str2)

功能:查找str2在在str1中第一次出现的位置,并返回指向这个位置的指针

返回:  字符指针

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
   char * str1  ="wohello,world!" ;
   char * str2="wor"; 
   char * pos;

   pos = strstr(str1, str2);

   printf("\n\"wor\"在\"wohello,world\"中第一个出现的位置下标为%d\n", pos-str1);

   system("pause");
   return(0);
}

运行结果:

13. strlen()

原型size_t  strstr(const char * str)

功能:返回str的长度

返回:  字符指针

示例:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
   char * str1  ="hello,world!" ;
  
   int len = strlen(str1);

   printf("\n\str1的长度:%d\n", len);

   system("pause");
   return(0);
}

运行结果:

14. strerror()

原型char * strerror(int n)

功能:传入不同的错误码时 返回对应的错误字符串。这个函数很有意思哦。

示例:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
	
   
   printf("\n \040 0 :%s \n", strerror(0)); /* \040是空格的转义字符 */
   printf("\n \040 1 :%s \n", strerror(1));
   printf("\n \040 2 :%s \n", strerror(2));
   printf("\n \040 3 :%s \n", strerror(3));
   printf("\n \040 4 :%s \n", strerror(4));
   printf("\n \040 5 :%s \n", strerror(5));
   printf("\n \040 6 :%s \n", strerror(6));
   printf("\n \040 -1 :%s \n", strerror(-1));
   system("pause");

   return(0);
}

 运行结果:

15. strtok()

原型char * strtok(char* str1,const char* str2,)

功能:传入不同的错误码时 返回对应的错误字符串。这个函数很有意思哦。

示例:

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

int main()
{
   char  str [] ="hello@world@coffee@tea!" ;
   char * c="@" ;
 
  
   printf("\n第一个:%s\n", strtok(str,c));
   printf("\n第二个:%s\n", strtok(NULL,c));
   printf("\n第三个:%s\n", strtok(NULL,c));
   printf("\n第四个:%s\n", strtok(NULL,c));

   printf("\n再重新开始:%s\n", strtok(str,c));
   system("pause");
   return(0);
}

运行结果:


二. mem开头

men开头的函数,主要目的是提供一个高效的函数接口。

1. memcpy()

原型void *  memcpy( char * str1, const char * str2 ,int n)

功能:将字符串str2中的n个字符拷贝到str1中;

示例:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
	
   char  str1[13]  ;
   char * str2="hello,world!" ;
  
   memcpy(str1,str2,13);
	
   printf("\n\str1中字符为:%s\n", str1);

   system("pause");
   return(0);
}

运行结果:

2. memcmp()

原型int  memcmp(const char * str1, const char * str2 ,int n)

功能:str1中的前n个字符和str2中的值进行比较。

返回:

        当str1<str2时,返回值<0

        当str1=bstr2时,返回值=0

        当str1>str2时,返回值>0

示例:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
	
   char * str1="hello,world!" ;
   char * str2="helle" ;
   char * resstr;
   int res=memcmp(str1,str2,5);
   if(res<0)
	  resstr="小于";
   else if(res=0)
	   resstr="等于";
   else 
	   resstr="大于";
   printf("\n\str1的前5个字符%sstr2的字符\n", resstr);

   system("pause");
   return(0);
}

运行结果:

3. memchr()

原型char * memchr(const char * str, char  c ,int n)

功能:在str中前n个字符中查找 c的位置,返回找到的位置的指针,如果找不到返回NULL

示例:

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

int main()
{
   char * str="hello,world!" ;
   char  c=',' ;
   char * pos;
   pos=(char*) memchr(str,c,10);
  
   printf("\n\",\"在\"hello,world\"的下标位置为:%d\n", pos-str);

   system("pause");
   return(0);
}

运行结果:

4. memset()

原型char * memchr( char * str, char  c ,int n)

功能:将s中的前n个字符替换为c,并返回s

示例:

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

int main()
{
   char  str []="hello,world!" ;
   char  c='w' ;
 
   memset(str,c,5);
   printf("\n\str中字符串:%s\n", str);

   system("pause");
   return(0);
}

运行结果:

5. memmove()

原型void *  memmove( char * str1, const char * str2 ,int n)

功能:将s中的前n个字符替换为c,并返回s,功能和memcpy一样,但是可以解决linux下memcpy因为地址重叠而造成替换失败的问题。算是对memcpy的一个升级。在windows系统中没有这个问题。

示例:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
   char * src="hello,world!";
   char dest[20];
   memmove(dest, src, 20);
  
   printf("源字符串  :%s\n",src);
   printf("目标字符串:%s\n",dest);
   system("pause");
   return(0);
}

运行结果:

可算完结了,如有疑问,欢迎探讨。

相关推荐

  1. <ctype.h> 文件C 语言字符处理函数详解

    2024-03-24 02:40:02       34 阅读
  2. C语言常用的库函数文件

    2024-03-24 02:40:02       35 阅读
  3. <math.h> 文件C语言数学库函数

    2024-03-24 02:40:02       36 阅读
  4. C语言string.h——主要函数总结

    2024-03-24 02:40:02       21 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-24 02:40:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-24 02:40:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-24 02:40:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-24 02:40:02       18 阅读

热门阅读

  1. Hive在虚拟机中的部署

    2024-03-24 02:40:02       18 阅读
  2. C++语句,空语句,复合语句

    2024-03-24 02:40:02       19 阅读
  3. SQL题:

    SQL题:

    2024-03-24 02:40:02      16 阅读
  4. Python 类的学习

    2024-03-24 02:40:02       16 阅读
  5. 洛谷 P1011 [NOIP1998 提高组] 车站

    2024-03-24 02:40:02       17 阅读
  6. kafka 01

    kafka 01

    2024-03-24 02:40:02      16 阅读
  7. Unity3D EventMgr事件订阅与发布详解

    2024-03-24 02:40:02       19 阅读
  8. taro常用的一些功能

    2024-03-24 02:40:02       17 阅读