关于<string.h>那些事 ------《str系列函数使用》(一)

一、关于<string.h>的介绍

配合上一篇食用>关于<string.h>那些事 ------《mem系列函数使用》<

str系列的函数应该算是<string.h>的主力军了,正如同它的名字一样string(字符串),str系列的函数是专门为字符串服务的,以至于连函数接受的参数都是字符串。

其实<string.h>真正上还应有strn系列的函数(就是str系列函数的升级版),它可以接收出字符串之外的参数,但<string.h>中只给出了三个函数(后面会说明),所以这里把它们归为了另一类

二、<string.h>的str系列函数使用

2.1 strcat()

函数&描述
strcat()char *strcat(char *str1, const char *str2)
strr2 所指向的字符串追加到 str1 所指向的字符串的结尾。

对于以上的函数原型里出现了:char *strcat() 、const 、char *str1 、char *str2 ;

char *strcat() :定义一个字符型指针的strcat函数(函数内对str1进行修改并自身作为一个指针返回)
const :表示安全标识,表示只读不修改
void *str1 :从传入的是一个字符类型str1指针指向要执行搜索的内存块
void *str2 :从传入的是一个字符类型str2指针指向要执行搜索的内存块

使用实例:

#include<stdio.h>
#include<string.h>
main()
{
	char str1[10]="hello";
	char str2[10]=" world!";
	printf("%s\n",strcat(str1,str2));
	//运行结果表示strcat返回了一个指针
	//可以直接printf出来
	printf("%s\n",str1);
	//并且strcat也改变了str1内值
	//还是老毛病,明显str1已经超出了所定义的范围但是c语言并没有截断
}

在这里插入图片描述

2.2 strncat()

函数&描述
strncat()char *strncat(char *str1, const char *str2, size_t n
str2 所指向的字符串追加到 str1 所指向的字符串的结尾,直到 n 字符长度为止。

对于以上的函数原型里出现了:char *strncat() 、const 、char *str1 、char *str2 ;

char *strncat() :定义一个字符型指针的strncat函数(函数内对str1进行修改并自身作为一个指针返回)
const :表示安全标识,表示只读不修改
char *str1 :从传入的是一个字符类型str1指针指向要执行搜索的内存块
char *str2 :从传入的是一个字符类型str2指针指向要执行搜索的内存块
size_t n :要被分析的字节数

使用实例:

#include<stdio.h>
#include<string.h>
main()
{
	char str1[10]="hello";
	char str2[10]=" world!";
	
	printf("%s\n",strncat(str1,str2,7));
	printf("%s\n",str1);
}

在这里插入图片描述
strcat和strcnat几乎一模一样,最本质的截断问题还是没解决,只不过strncat加了个可以控制把str2的前n个字符追加给str1

2.3 strchr()

函数&描述
strchr()char *strchr(const char *str, int c)
在参数 str 所指向的字符串中搜索第一次出现字符 c(一个无符号字符)的位置。

char *strchr() :定义一个字符型指针的strchr函数(函数内并没有对str1进行修改,只是自身作为一个指针返回)
const :表示安全标识,表示只读不修改
char *str :从传入的是一个字符类型str1指针指向要执行搜索的内存块
int c :以 int 形式传递的值,但是函数在每次字节搜索时是使用该值的无符号字符形式

使用实例:

#include<stdio.h>
#include<string.h>
main()
{
	char str[]="hello world";
	char c='e';
	char *p1=strchr(str,c);
	char *p2=strchr(str,'i');
	//strchr接受的c是一个无符号字符
	
	printf("%s\n",p1);
	//运行结果表示strchr自身作为一个字符指针返回从c往后的字符
	printf("%s\n",str);
	//strchr并没有改变str内的值
	printf("%s",p2);
	//str中无i元素,所以返回一个(null)
}

在这里插入图片描述
*注:(null)是一个空指针,只代表“空”的意义(也就是无意义),可以被换行符抵消

2.4 strcmp()

函数&描述
strcmp()int strcmp(const char *str1, const char *str2)
str1 所指向的字符串和 str2 所指向的字符串进行比较。

对于以上的函数原型里出现了:char *strcmp() 、const 、char *str1 、char *str2 ;

int strcmp() :定义一个整型strcmp函数(说明此函数的返回值是一个整型)
const :表示安全标识,表示只读不修改
char *str1 :从传入的是一个字符类型str1指针指向要执行搜索的内存块
char *str2 :从传入的是一个字符类型str2指针指向要执行搜索的内存块

#include<stdio.h>
#include<string.h>
main()
{
	char str1[]="hello world";
	char str2[]="Hello World!";
	int ret=strcmp(str1,str2);
	
	printf("%d\n",ret);
	printf("%d\n",strcmp(str1,"how"));
	printf("%d\n",strcmp(str1,str1));
	//运行结果表示strcmp是将str内的字符所对应的ASCII
	//str1>str2 -> return 1;
	//str1=str2 -> return 0;
	//str1<str2 -> return -1;
}

在这里插入图片描述

2.5 strncmp()

函数&描述
strncmp()int strncmp(const char *str1, const char *str2, size_t n)
str1str2 进行比较,最多比较前 n 个字节。

int strncmp() :定义一个整型strncmp函数(说明此函数的返回值是一个整型)
const :表示安全标识,表示只读不修改
char *str1 :从传入的是一个字符类型str1指针指向要执行搜索的内存块
char *str2 :从传入的是一个字符类型str2指针指向要执行搜索的内存块
size_t n :要被分析的字节数

#include<stdio.h>
#include<string.h>
main()
{
	char str1[]="hello world";
	char str2[]="Hello World!";
	int n=12;
	int ret=strncmp(str1,str2,n);
	
	printf("%d\n",ret);
	printf("%d\n",strncmp(str1,"how",n));
	printf("%d\n",strncmp(str1,str1,n));
	//运行结果表示strncmp是将str内的字符所对应的ASCII进行比较
    //与strcmp不同的是:
    //strcmp是将str内的字符所对应的ASCII进行比较,返回值是-1、0、1
    //strncmp是str内的字符所对应的ASCII进行相减,返回值是相减后的ASCII
}

在这里插入图片描述

2.6 strcoll()

函数&描述
strcollint strcoll(const char *str1, const char *str2)
把 str1 和 str2 进行比较,结果取决于 LC_COLLATE 的位置设置。

strcoll的比较方式是取决于LC_COLLATE,而在c语言中strcoll的比较方式与strcmp一模一样,因为这篇文章主要以c语言为主,所以在这里就不多描述了

三、总结

mem系列函数和str系列函数中有许多的相似之处,所以可以配合上一篇食用
>关于<string.h>那些事 ------《mem系列函数使用》<

str系列函数总共有17个,所以我将把它们分为三篇文章讲述,在《关于<string.h>那些事》系列结束后我会进行一次汇总,排一下序,使文章看起来不是那么的乱

如果有什么问题或我描述不清可以给我留言、评论

  • 16
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

(任)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值