C语言——字符函数和字符串函数(三)【strtok,strerror,perror】

这篇具有很好参考价值的文章主要介绍了C语言——字符函数和字符串函数(三)【strtok,strerror,perror】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

📝前言:
上一篇文章C语言——字符函数和字符串函数(二)对字符函数和字符串函数strstrstrcmp和strncmp进行了一定的讲解
这篇文章主要讲解以下函数的用法:
1,strtok
2,strerror
3,perror

🎬个人简介:努力学习ing
📋个人专栏:C语言入门基础
🎀CSDN主页 愚润求学
🌄每日鸡汤:知不足而奋进,望远山而前行


一,strtok的使用

1,strtok初步了解

我们先来看一下官网对它的介绍👇🏻
C语言——字符函数和字符串函数(三)【strtok,strerror,perror】,C语言入门基础,c语言,开发语言,笔记,经验分享,学习方法
提取出它的函数原型:char * strtok ( char * str, const char * delimiters );
①我们先分别理解这里面的参数返回类型
●参数1:str是需要分割的字符串
●参数2:delimiters是用来分割的分割符的集合
●返回:返回一个指针(下面会讲解具体的返回情况)

strtok的功能是:根据delimiters里面的分隔字符,把 str分割成不同的标记(这些标记是由分隔符中的任何字符分隔的连续字符序列。)
可能有点抽象,下面我举个例子:

比如我们要分割“zhangsan@163.com”这一个字符串
请看下面的代码👇🏻

#include<stdio.h>
#include<string.h>
int main()
{
	char arr[] = "zhangsan@163.com";
	char str[3] = { '.','@'};
	printf("%s", strtok(arr, str));
	return 0;
}

这里面arr是我们分割的字符串,str是分隔字符的集合
正常流程就是:用str中的分隔字符,把arr分成:zhangsan,163,com这几个标记

但是当我们运行,输出结果👇🏻
C语言——字符函数和字符串函数(三)【strtok,strerror,perror】,C语言入门基础,c语言,开发语言,笔记,经验分享,学习方法
(通过这个结果我们可以猜测:printf应该是从z这个首地址开始打印,但是打印完zhangsan就停止了)
是不是这样呢?(当我们了解了strtok的返回和注意事项就会理解)👇🏻

2,注意事项

strtok函数在找到str中的下一个标记的时候,会将标记用‘\0’结尾(即可能会替换掉这个标记结尾的分隔符)
请看👇🏻
C语言——字符函数和字符串函数(三)【strtok,strerror,perror】,C语言入门基础,c语言,开发语言,笔记,经验分享,学习方法
显而易见,当这一次strtok被调用后,找到了第一个标记zhangsan,然后把张三后面的@换成了\0
总之,strtok函数会改变被操作的字符串,因此在我们使用strtok分割字符串时,可以先把字符串拷贝一份,对拷贝的那一份进行操作,这样就不会造成原来的字符串丢失。

3,返回值的不同情况

在这里返回情况可以分为三类:
1,strtok的参数1不为NULL
2,strtok的参数1为NULL
3,字符串中不存在更多标记

(1)strtok的参数1不为NULL

这时候函数会找到str中的第一个标记,然后以\0将它结尾,并且记住这个标记结束后的位置,然后返回一个指向这个标记起始位置的指针
继续看上面用到的例子:

#include<stdio.h>
#include<string.h>
int main()
{
	char arr[] = "zhangsan@163.com";
	char str[3] = { '.','@'};
	printf("%s", strtok(arr, str));
	return 0;
}

C语言——字符函数和字符串函数(三)【strtok,strerror,perror】,C语言入门基础,c语言,开发语言,笔记,经验分享,学习方法
在这个例子里,strtok函数返回了zhangsan的起始位置z,随后printfz位置开始打印,遇到了被strtok修改成的\0于是停止了打印

(2)strtok的参数1为NULL

strtok的参数为NULL时,函数就会从同一个字符串中被保留的位置(即上一个标记结束后的位置)开始,查找下一个标记,当找到标记后,依然是:\0将这个标记结尾,并且记住这个标记结束后的位置,然后返回一个指向这个标记起始位置的指针

请看下面的代码,依旧是要实现分割“zhangsan@163.com”这一个字符串👇🏻

#include<stdio.h>
#include<string.h>
int main()
{
	char arr[] = "zhangsan@163.com";
	char str[3] = { '.','@'};
	char* ptr = NULL; //用ptr接收返回的指针
	for (ptr = strtok(arr, str); ptr != NULL; ptr = strtok(NULL, str))          
	{
		printf("%s\n", ptr); //用ptr接收的地址打印
	}
	//用for循环可以实现第一次传入strtok的arr
	// 然后传入strtok的都是NULL
	return 0;
}

输出结果:
C语言——字符函数和字符串函数(三)【strtok,strerror,perror】,C语言入门基础,c语言,开发语言,笔记,经验分享,学习方法
arr的变化:
C语言——字符函数和字符串函数(三)【strtok,strerror,perror】,C语言入门基础,c语言,开发语言,笔记,经验分享,学习方法
第一次strtok返回z的地址,且strtok@改成\0ptr接收到了z的地址
第二次strtok返回1的地址,且把.改成\0ptr接收了1的地址
第三次strtok返回c的地址,且把\0改成\0(通俗理解),ptr接收了c的地址
然后根据ptr这些地址分别打印出了这些标记
那第四次,com之后找不到标记了呢?👇🏻

(3)字符串中不存在更多标记

当字符串中不存在更多标记时,函数就会返回NULL指针,这也就是为什么上面的例子中for循环的进入条件是:ptr != NULL

二,strerror的使用

头文件:<errno.h>
strerror是一个传入错误码作为参数返回参数部分错误码对应的错误信息的字符串地址的函数

先简单了解什么是错误码:
C语言程序启动的时候,如果程序出现问题,会返回一个错误码,这个错误码会被记录到errno这个全局变量中
不同的错误码都对应着不同的错误信息

使用展示👇🏻

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

int main() {
    FILE* file = fopen("nonexistent_file.txt", "r");
    if (file == NULL) {
        printf("Error opening file: %s\n", strerror(errno));
        return 1; // 返回错误码  
    }
    // ...其他代码...  
    fclose(file);
    return 0; // 返回0表示成功  
}

输出结果:
C语言——字符函数和字符串函数(三)【strtok,strerror,perror】,C语言入门基础,c语言,开发语言,笔记,经验分享,学习方法

在这个例子中,如果文件打开失败,fopen函数会返回NULL,并且errno会记录一个表示具体错误的值。
我们使用strerror函数就可以得到错误码对应的错误信息的地址,然后打印出来。

三,perror的使用

perror函数也是一个用来打印错误码的函数
通过接受一个字符串作为参数,并把它作为错误消息输出到标准错误流
同样是上面的代码,我们修改一下,用perror👇🏻

#include <stdio.h>  
#include <errno.h>  
#include <string.h>  
  
int main() {  
    FILE *file = fopen("nonexistent_file.txt", "r");  
    if (file == NULL) {  
        perror("Error opening file");  
        return 1; // 返回错误码  
    }  
    // ...其他代码...  
    fclose(file);  
    return 0; // 返回0表示成功  
}

C语言——字符函数和字符串函数(三)【strtok,strerror,perror】,C语言入门基础,c语言,开发语言,笔记,经验分享,学习方法
输出结果是完全一样的,perror的不同就在于,它打印完参数部分的字符串后,在打印一个:和一个 (空格),接着打印错误信息。


🌈我的分享也就到此结束啦🌈
要是我的分享也能对你的学习起到帮助,那简直是太酷啦!
若有不足,还请大家多多指正,我们一起学习交流!
📢公主,王子:点赞👍→收藏⭐→关注🔍
感谢大家的观看和支持!祝大家都能得偿所愿,天天开心!!!文章来源地址https://www.toymoban.com/news/detail-761934.html

到了这里,关于C语言——字符函数和字符串函数(三)【strtok,strerror,perror】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言 字符串解析strchr/strrchr/strtok//strtok_r函数使用

    在程序中,解析用户输入的参数(命令行参数)是很常见的操作,本文将讲解C语言中常见的一些解析字符串函数使用方法。 1 strchr 1.1 描述 strchr() 用于查找字符串中的一个字符,并返回该字符在字符串中第一次出现的位置。其原型定义在头文件 string.h 中。 char *strchr(const ch

    2024年02月03日
    浏览(39)
  • c语言-库函数strstr()、strtok()、strerror()介绍

    本篇文章介绍c语言库函数strstr()、strtok()、strerror()的使用。 strstr()实现的是查找子字符串。 下面是cplusplus网站关于这个库函数的介绍以及使用。 说明: 参数str1:被扫描的字符串 参数str2:需要查找的子字符串 返回值: 返回值不为NULL,说明在str1存在str2,返回str1第一次出现s

    2024年01月17日
    浏览(65)
  • C语言:字符函数和字符串函数(一篇拿捏字符串函数!)

    目录 求字符串长度: 1. strlen(字符串长度) 长度不受限制函数: 2. strcpy(字符串拷贝) 3. strcat(字符串追加) 4. strcmp(字符串比较) 长度受限制函数: 5. strncpy(字符串拷贝) 6. strncat(字符串追加) 7. strncmp(字符串比较) 字符串查找: 8. strstr(查找字符串子串) 9. strtok(字符串分割) 错误信

    2024年02月10日
    浏览(101)
  • 【C语言】字符函数,字符串函数,内存函数

    大家好!今天我们来学习C语言中的字符函数,字符串函数和内存函数。 目录 1. 字符函数 1.1 字符分类函数 1.2 字符转换函数 1.2.1 tolower(将大写字母转化为小写字母) 1.2.2 toupper(将小写字母转化为大写字母) 2. 字符串函数 2.1 字符串输入函数 2.1.1 gets() ​2.1.2 fgets() 2.2 字符串

    2024年02月10日
    浏览(57)
  • C语言 - 字符函数和字符串函数

    目的:学习主要常见字符串和字符串函数,及其部分函数的模拟过程。 C语⾔中有⼀系列的函数是专⻔做字符分类的,也就是⼀个字符是属于什么类型的字符的。 这些函数的使⽤都需要包含⼀个头⽂件是 ctype.h。 这些函数的使⽤⽅法⾮常类似,我们就讲解⼀个函数的事情,其

    2024年02月05日
    浏览(74)
  • C语言—字符函数和字符串函数

    C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在 常量字符串中或者字符数组中。字符串常量适用于那些对它不做修改的字符串函数。 strlen函数的介绍 strlen函数用于求字符串的长度 注: 字符串已经 ‘\\0’ 作为结束标志,strlen函

    2024年02月07日
    浏览(45)
  • 【C语言】字符函数和字符串函数

      目录 1.求字符串长度strlen 2.长度不受限制的字符串函数 字符串拷贝strcpy 字符串追加strcat 字符串比较strcmp 3.长度受限制的字符串函数介绍strncpy strncat ​编辑strncmp 4.字符串查找strstr 5.字符串分割strtok 6.错误信息报告 strerror perror 7.字符分类函数 8.字符转换函数  9.内存操作函

    2024年02月12日
    浏览(58)
  • C语言——字符函数和字符串函数

    assert.h 头文件定义了宏assert(),⽤于在运⾏时确保程序符合指定条件,如果不符合,就报 错终⽌运⾏。这个宏常常被称为 “断⾔” 。 assert() 宏接受⼀个表达式作为参数。如果该表达式为真(返回值⾮零), assert() 不会产⽣任何作⽤,程序继续运⾏。如果该表达式为假(

    2024年04月25日
    浏览(53)
  • C语言:字符函数和字符串函数

    C语言:初识C语言 C语言:分支语句和循环语句 C语言:函数 C语言:数组 C语言:操作符详解 C语言:指针详解 C语言:结构体 C语言:数据的存储 今天来盘一下字符函数和字符串函数。 C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常

    2024年02月11日
    浏览(67)
  • 【C语言】字符函数和字符串函数(1)

    #国庆发生的那些事儿# 大家好,我是苏貝,本篇博客带大家了解字符函数和字符串函数,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️ 求字符串长度 strlen 长度不受限制的字符串函数 strcpy strcat strcmp 长度受限制的字符串函数介绍 strncpy strncat strncmp 字符串查

    2024年02月08日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包