strstr
char* strstr(const char* string,const char* strCharSet);
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <assert.h>
char* my_strstr(const char* str1, const char* str2)
{
assert(str1&&str2);
char* s1, *s2;
char* cur = (char*)str1;
if (!*str2)
{
return (char*)str1;
}
while (*cur)
{
s1 = cur;
s2 = (char*)str2;
while ((*s1)&&(*s2)&&(*s1==*s2))
{
s1++;
s2++;
}
if (!*s2)
{
return cur;
}
cur++;
}
return NULL;
}
int main()
{
char* p1 = "abbbcdef";
char* p2 = "bbc";
char* ret = my_strstr(p1, p2);
if (ret == NULL)
{
printf("子串不存在");
}
else
{
printf("%s\n", ret);
}
return 0;
}
官方库函数的写法:
strtok
char* strtok(char* str,const char* sep);
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int main()
{
//192.168.0.1
char arr[] = "192.168.32.33";
char* p = ".";
char buf[1024] = { 0 };
strcpy(buf, arr);
char* ret = NULL;
for (ret = strtok(arr, p); ret != NULL; ret = strtok(NULL, p))
{
printf("%s\n", ret);
}
return 0;
}
strerror
char* strerror(int errnum);
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <errno.h>
int main()
{
//errno是一个全局的错误码的变量
//当C语言的库函数在执行过程中发生了错误,就会把对应的错误码赋值到errno中
FILE* pf = fopen("test.txt", "r");
if (pf == NULL)
{
char* str = strerror(errno);
printf("%s\n", str);
}
else
{
printf("open file success\n");
}
//char* str = strerror(errno);
//printf("%s\n", str);
return 0;
}
问:errno 错误码表
ChatAI答:
errno 是一个错误码的全局变量,用于表示最近发生的错误代码。errno 是一个整数,可被系统内核或 C 库函数设置和修改。
以下是一些常见的 errno 错误码及其描述:
错误码 | 描述 |
---|---|
EACCES | 权限不足 |
EBADF | 无效的文件描述符 |
EFAULT | 指针指向区域无法访问 |
EINTR | 被系统调用中断 |
EINVAL | 无效的参数 |
EIO | I/O 错误 |
EISDIR | 设备是一个目录 |
ENOENT | 无此文件或目录 |
ENOMEM | 没有足够的内存 |
ENOSPC | 没有足够的空间 |
此外,不同的系统可能会定义其他自定义错误码。您可以通过 perror
函数将上一个系统调用的错误信息输出到标准错误流中,并在错误信息前加上自定义的字符串以提供更多的上下文信息。
例如,当 open
函数因权限不足而失败时,errno 被设置为 EACCES
:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
void handleError() {
perror("open");
exit(EXIT_FAILURE);
}
int main() {
int fd = open("file.txt", O_RDONLY);
if (fd == -1) {
handleError();
}
return 0;
}
字符分类函数
函数 | 如果他的参数符合下列条件就返回真 |
---|---|
iscntrl | 任何控制字符 |
isspace | 空白字符:空格‘ ’,换页‘\f’,换行’\n’,回车‘\r’,制表符’\t’或者垂直制表符’\v’ |
isdigit | 十进制数字 0~9 |
isxdigit | 十六进制数字,包括所有十进制数字,小写字母a~f,大写字母A ~ F |
islower | 小写字母a~z |
isupper | 大写字母A~Z |
isalpha | 字母a~z或A ~ Z |
isalnum | 字母或者数字,a ~ z,A ~ Z,0 ~ 9 |
ispunct | 标点符号,任何不属于数字或者字母的图形字符(可打印) |
isgraph | 任何图形字符 |
isprint | 任何可打印字符,包括图形字符和空白字符 |
字符转换
int tolower ( int c );
int toupper ( int c );
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <ctype.h>
int main()
{
char arr[] = "I Am A Killer!";
int i = 0;
while (arr[i])
{
if (isupper(arr[i]))
{
arr[i] = tolower(arr[i]);
}
i++;
}
printf("%s\n", arr);
return 0;
}