当前位置: 首页 > article >正文

C语言学习笔记-进阶(7)字符串函数3

1. strstr的使用和模拟实现

char * strstr ( const char * str1, const char * str2);

Returns a pointer to the first occurrence of str2 in str1, or a null pointer if str2 is not part of str1. (函数返回字符串str2在字符串str1中第⼀次出现的位置)。

The matching process does not include the terminating null-characters, but it stops there.(字符 串的比较匹配不包含 \0 字符,以 \0 作为结束标志)。

/* strstr example */
#include <stdio.h>
#include <string.h>
int main ()
{
 char str[] ="This is a simple string";
 char * pch;
 pch = strstr (str,"simple");
 strncpy (pch,"sample",6);
 printf("%s\n", str);
 return 0;
}

strstr的模拟实现:

char * strstr (const char * str1, const char * str2)
{
 char *cp = (char *) str1;
 char *s1, *s2;
 if ( !*str2 )
 return((char *)str1);
 while (*cp)
 {
 s1 = cp;
 s2 = (char *) str2;
 while ( *s1 && *s2 && !(*s1-*s2) )
 s1++, s2++;
 if (!*s2)
 return(cp);
 cp++;
 }
 return(NULL);
}

2. strtok函数的使用

char * strtok ( char * str, const char * sep);

sep参数指向⼀个字符串,定义了⽤作分隔符的字符集合

第⼀个参数指定⼀个字符串,它包含了0个或者多个由sep字符串中⼀个或者多个分隔符分割的标 记。

strtok函数找到str中的下⼀个标记,并将其⽤ \0 结尾,返回⼀个指向这个标记的指针。(注:

strtok函数会改变被操作的字符串,所以在使⽤strtok函数切分的字符串⼀般都是临时拷⻉的内容 并且可修改。)

strtok函数的第⼀个参数不为 NULL ,函数将找到str中第⼀个标记,strtok函数将保存它在字符串 中的位置。

strtok函数的第⼀个参数为 NULL ,函数将在同⼀个字符串中被保存的位置开始,查找下⼀个标 记。

如果字符串中不存在更多的标记,则返回 NULL 指针。

#include <stdio.h>
#include <string.h>
int main()
{
 char arr[] = "192.168.6.111";
 char* sep = ".";
 char* str = NULL;
 for (str = strtok(arr, sep); str != NULL; str = strtok(NULL, sep))
 {
 printf("%s\n", str);
 }
 return 0;
}

3. strerror函数的使用

char * strerror ( int errnum );

strerror函数可以把参数部分错误码对应的错误信息的字符串地址返回来。

在不同的系统和C语⾔标准库的实现中都规定了⼀些错误码,⼀般是放在 errno.h 这个头⽂件中说明的,C语⾔程序启动的时候就会使用一个全面的变量errno来记录程序的当前错误码,只不过程序启动的时候errno是0,表⽰没有错误,当我们在使用标准库中的函数的时候发⽣了某种错误,就会讲对应的错误码,存放在errno中,而⼀个错误码的数字是整数很难理解是什么意思,所以每⼀个错误码都是有对应的错误信息的。strerror函数就可以将错误对应的错误信息字符串的地址返回。

#include <errno.h>
#include <string.h>
#include <stdio.h>
//我们打印⼀下0~10这些错误码对应的信息
int main()
{
 int i = 0;
 for (i = 0; i <= 10; i++) {
 printf("%s\n", strerror(i));
 }
 return 0;
}

在Windows11+VS2022环境下输出的结果如下:

No error
Operation not permitted
No such file or directory
No such process
Interrupted function call
Input/output error
No such device or address
Arg list too long
Exec format error
Bad file descriptor
No child processes

举例:

#include <stdio.h>
#include <string.h>
#include <errno.h>
int main ()
{
 FILE * pFile;
 pFile = fopen ("unexist.ent","r");
 if (pFile == NULL)
 printf ("Error opening file unexist.ent: %s\n", strerror(errno));
 return 0;
}

输出:

Error opening file unexist.ent: No such file or directory

也可以了解⼀下perror函数,perror 函数相当于一次将上述代码中的第9行完成了,直接将错误信息打印出来。perror函数打印完参数部分的字符串后,再打印一个冒号和一个空格,再打印错误信息。

#include <stdio.h>
#include <string.h>
#include <errno.h>
int main ()
{
  FILE * pFile;
  pFile = fopen ("unexist.ent","r");
  if (pFile == NULL)
     perror("Error opening file unexist.ent");
  return 0;
}

输出:

Error opening file unexist.ent: No such file or directory

http://www.kler.cn/a/578080.html

相关文章:

  • 树莓派学习(一)——3B+环境配置与多用户管理及编程实践
  • SQL注入的原理及详细运用
  • 在 Docker 中搭建GBase 8s主备集群环境
  • Banana Pi OpenWRT One Wifi6 OpenWrt社区官方开源路由器评测
  • mysql忘记初始临时密码解决方法
  • 夏门大学DeepSeek 手册:从社会大众到高校及企业的全面应用实践研究(附 PDF 下载)
  • 2025年渗透测试面试题总结-长某亭科技-安全服务工程师(二面) (题目+回答)
  • react任务调度(简单版)和最小堆算法
  • Leetcode 62: 不同路径
  • 掌握Kubernetes Network Policy,构建安全的容器网络
  • 蓝桥备赛(13)- 链表和 list(下)
  • Linux(ubuntu)环境下部署The Fuck项目的方法(保姆级教程)
  • Feign 核心规则与最佳实践:避免入坑指南
  • 【哇! C++】类和对象(三) - 构造函数和析构函数
  • LeetCodehot 力扣热题100 跳跃游戏2
  • Python 性能优化:从入门到精通的实用指南
  • 微信小程序调用阿里云的大规模模型+后端 python 实现人与人工智能进行对话
  • 【Oracle学习笔记】1.数据库组成对象
  • Linux中的进程优先级与设置方法
  • 可视化编辑器选择