我是靠谱客的博主 活力美女,最近开发中收集的这篇文章主要介绍字符函数(strlen、strcpy、strcmp、strerror)一、strlen 函数二、strcpy 函数三、strcmp函数四、strerror 函数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

一、strlen 函数

二、strcpy 函数

三、strcmp函数

四、strerror 函数


这里仅列举出了部分需要注意的函数,至于其他的 strcat、strtok函数没有列举出来。

一、strlen 函数

strlen 函数用于获取一个字符串的长度。本质是用一个变量cnt计数,只要不是'',cnt++,地址也向后移动一个单位;一旦遇到 '',停止计数并返回计数结果。

函数声明如下:

1、形参返回值解析

形参:输入一个 char* 类型,相当于提供字符串首元素的地址

返回值:返回你输入的字符串的长度

2、函数特点

(1) strlen 返回字符串中 '' 前面出现的字符数

'' 作为字符串的结束标志,strlen函数返回的是在字符串中 '' 前面出现的字符个数(不包 含 '' )

char* str1 = "hello";
// 5,注意末尾有个隐藏的''
char str2[] = "hello";
// 5
char str2[] = {'h','e','l','l','o',''};
// 5
char str2[] = {'h','e','l','l','o','','a','b','c'};
// 5,一遇到'',函数就会返回
char str2[] = {'h','e','l','l','o'};
// 长度不确定,因为没有'',因为数组不会自动补充

(2) strlen函数的返回值是无符号整型

strlen函数的返回值是size_t,即unsigned int

int main() {
const char* pstr1 = "hello,world";
const char* pstr2 = "hello";
if (strlen(pstr2) - strlen(pstr1) > 0)
{
printf("大于");
}
else
{
printf("小于等于");
}
return 0;
}

无符号整型相减的结果依然是无符号整型,但strlen(pstr2) - strlen(pstr1) 的结果是 -6,所以这个 -6 在比较大小的时候需要倾向于范围较小的那一方,即转换成无符号类型。

-6 在内存中的补码为 10000000 00000000 00000000 00000110,现在要当作无符号来看,即所有的位置都是有效位,转换成原码就是

01111111 11111111 11111111 11111010

很显然这个数是 大于 0的,所以打印的结果是“大于”

二、strcpy 函数

strcpy函数 将源字符串里的所有字符(包括'')逐个拷贝到目标空间。拷贝时一旦遇到‘ ’,此时会中止拷贝,先把'' 拷贝到目标地址, 然后再返回目标地址。

函数声明如下:

1、形参返回值解析

第一个参数:目标空间的地址,可以是一个数组首元素的地址,也可以是malloc出来的地址

第二个参数:源字符串首元素的地址

返回值:返回目标空间的地址

2、函数特点

函数有以下两点需要注意:

  • strcpy 函数会将源字符串中的 '' 拷贝到目标空间
  • 目标空间必须足够大,以确保能放下源字符串

3、函数使用

int main() {
char src[20] = { 'h','e', 'l', 'l', 'o', '','a','b','c' };
char dst[20];
strcpy(dst, src);
return 0;
}

 这也从侧面证实了,strcpy 遇到'' 会停止拷贝,但是会把''拷贝到目标空间。

三、strcmp函数

strcmp 函数可以比较两个字符串的大小。本质上是逐字节比较,即便是比较汉字,一个汉字占2个字节,也是先将汉字存到内存,然后逐字节比较。

函数声明如下:

1、参数返回值解析

参数介绍:输入的是需要用来比较的两个参数,可以是数组首元素地址,也可以是字符串首元素地址。

返回值:

  • 左边 > 右边,返回大于0的数字(不一定返回的就是1)
  • 左边 = 右边,返回0
  • 左边 < 右边,返回小于0的数字(不一定返回的就是-1)

2、函数特点

这里需要注意strcmp 什么时候会停止比较:

(1) 两者之一遇到 '' 

两个字符串只要其中一个先遇到 '',后面就停止比较,此时会让 '' 参与比较

int main() {
char* str1 = "ab";
char* str2 = "abcd";
int ret = strcmp(str1, str2);
printf("比较结果为: %dn", ret);
return 0;
}

 str1先遇到'',此时会把 '' 和 'c' 比较,结果是 ‘c’ 更大,所以返回结果是 -1

(2) 在遇到'' 之前就分出大小

int main() {
char* str1 = "abdd";
char* str2 = "abcd";
int ret = strcmp(str1, str2);
printf("比较结果为: %dn", ret);
return 0;
}

两个字符串比较到第2个位置的时候,'d' 因为大于 'c',所以结果是str1更大,返回结果为1

四、strerror 函数

strerror 函数获取 系统错误码对应的错误信息。当调用库函数出错的时候,错误码会存在变量errno 中,要使用该变量需引入errno.h 头文件。

 

1、参数返回值解析

第一个参数:错误码errno

返回值:返回 系统错误码对应的错误信息

2、函数使用

int main() {
FILE* fd = fopen("a.txt", "r");
if (fd == NULL)
{
printf("错误信息为: %sn", strerror(errno));
return -1;
}
return 0;
}

因为a.txt 不存在,所以这里肯定会打开失败。其实C还给我们提供了一个更直接的函数 perror,使用这个函数可以直接打印错误提示信息。

最后

以上就是活力美女为你收集整理的字符函数(strlen、strcpy、strcmp、strerror)一、strlen 函数二、strcpy 函数三、strcmp函数四、strerror 函数的全部内容,希望文章能够帮你解决字符函数(strlen、strcpy、strcmp、strerror)一、strlen 函数二、strcpy 函数三、strcmp函数四、strerror 函数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(33)

评论列表共有 0 条评论

立即
投稿
返回
顶部