c语言string.h头文件中所有函数示例详解

 更新时间:2024年11月29日 10:47:48   作者:伯恩bourne  
这篇文章详细介绍了C语言标准库中的字符串和内存操作函数,以str开头的字符串处理函数和以mem开头的内存处理函数,每种函数都有详细的原型、功能描述和示例代码,需要的朋友可以参考下

前言

头文件<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. strncpy() 复制

原型: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() 比较

原型:int strcmp(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 main()
{
   char * str1  ="hello,world!" ;
   char * str2  ="hello,human!"; 
  
   int res= strcmp(str1, str2);
   if(res<0)
	 printf("str1小于str2");
   else if(res==0)
	 printf("str1等于str2");
   else
	 printf("str1大于str2");
    printf("\n");
   system("pause");
   return(0);
}

运行结果:

6. strncmp() 比较

原型:int strncmp(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!"; 
  
   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");
   printf("\n");
   system("pause");
   return(0);
}

运行结果:

发现和strcmp()中的结果不一样,是因为strncmp(str1, str2,5)中,只比较了前5个字符。前5个字符都是hello,所以相等。

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)

功能:使用str2,对str1字符串进行分隔截取,返回截取的部分字符串

示例:

#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() 替换

原型void * memset( void * ptr, int  value ,size_t n)

功能:此函数初始化函数,将某一块内存(参数ptr)中的内容全部设置为指定的值 value

         将ptr中的前n个数据替换为value,并返回ptr,

示例1:

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

运行结果:

示例2:

结构变量初始化,将结构中的变量用value初始化。

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

typedef struct manager {
	int iArr [12];
	float fArr [5];
	char ch; //整型int赋值给char,只要数组在-128到127之间就没问题
} Manager;

//打印manager中的值
 void  printManager(Manager manager)
{
	int i=0;
	puts("iArr值:");
	for(; i<12; i++)   //打印数组iArr的所有元素
		printf("第%d个: %d\n",i+1, manager.iArr[i]);
	puts("\nmanager->fArr值:");
	for(i=0; i<5; i++) //打印数组fArr的所有元素
		printf("第%d个: %f\n",i+1, manager.fArr[i]);
	puts("\nmanager->ch值:");
	printf("%c\n", manager.ch);
}

void memsetTest()
{
	Manager  manager ;
		
	printf("使用65初始化\n");
	memset(&manager,65,sizeof(manager));
	printManager(manager);

	printf("\n使用0初始化\n");
	memset(&manager,0,sizeof(manager));
	printManager(manager);

}

int main()
{

    memsetTest();
	getchar();
	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);
}

运行结果:

总结

到此这篇关于c语言string.h头文件中所有函数示例详解的文章就介绍到这了,更多相关c语言string.h头文件函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 利用Matlab复刻两款粒子爱心动画效果

    利用Matlab复刻两款粒子爱心动画效果

    最近电视剧《点燃我,温暖你》大火,蹭一下热度,发一下MATLAB画爱心的代码,写的比较随意,大家可以自行调整粒子大小和颜色啥的
    2022-11-11
  • 详解C语言中的内存四区模型及结构体对内存的使用

    详解C语言中的内存四区模型及结构体对内存的使用

    这篇文章主要介绍了C语言中的内存四区模型及结构体对内存的使用,包括结构体中内存泄漏情况的注意点提醒,需要的朋友可以参考下
    2016-03-03
  • C语言实现输入ascii码,输出对应的字符方式

    C语言实现输入ascii码,输出对应的字符方式

    这篇文章主要介绍了C语言实现输入ascii码,输出对应的字符方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • C语言每日练习之乒乓球比赛问题

    C语言每日练习之乒乓球比赛问题

    这篇文章主要为大家详细介绍了C语言实现乒乓球比赛,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • C++俄罗斯方块游戏 无需图形库的俄罗斯方块

    C++俄罗斯方块游戏 无需图形库的俄罗斯方块

    这篇文章主要为大家详细介绍了无需图形库的C++俄罗斯方块游戏,重温经典游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • C++中发声函数Beep用法

    C++中发声函数Beep用法

    本文给大家分享的是Beep函数的用法以及会使扬声器发出简单的声音的示例,有需要的小伙伴可以参考下
    2017-05-05
  • C++中int main(int argc, char** argv)的参数使用

    C++中int main(int argc, char** argv)的参数使用

    int main(int argc, char** argv) 是C和C++程序的入口点,其中argc和argv是用来接收从命令行传递给程序的参数的,本文就来介绍一下这两个参数的含义,感兴趣的可以了解一下的相关资料
    2024-01-01
  • C语言代码实现简易三子棋游戏

    C语言代码实现简易三子棋游戏

    这篇文章主要为大家详细介绍了C语言代码实现简易三子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05
  • C++11 学习笔记之std::function和bind绑定器

    C++11 学习笔记之std::function和bind绑定器

    这篇文章主要介绍了C++11 学习笔记之std::function和bind绑定器,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-07-07
  • C++ qt 使用jsoncpp json 读写操作

    C++ qt 使用jsoncpp json 读写操作

    JsonCpp是一个基于C++语言的开源库,用于C++程序的Json数据的读写操作,本文重点给大家介绍C++ qt 使用jsoncpp json 读写操作,感兴趣的朋友跟随小编一起看看吧
    2021-11-11

最新评论