各种函数使用介绍 - ->C语言库函数
1. 函数返回字符串str2在字符串str1中第⼀次出现的位置 2. 字符串的比较匹配不包含 \0 字符,以 \0 作为结束标志
简而言之,即是在字符串str1中寻找是否有与字符串str2相同的字符串,如果有:则返回从字符串str1中首次出现相同字符串的位置,没有:则返回NULL。
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[] = "abcdefghi";
char arr2[] = "def";
char* ret = strstr(arr1, arr2);
if (ret == NULL)
printf("找不到\n");
else
printf("找到了:%s\n", ret);
return 0;
}
通过strstr函数,遍历字符串arr1,在arr1中寻找是否存在字符串arr2,当arr1走到‘d’的位置时,开始记录此位置,接着继续往下走,看是否与arr2中的第二个字符相匹配,如果是则循环下去,如果不是则不记录此位置,继续往下走。
改下字符串arr1中的字符呢?
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[] = "abefghi";
char arr2[] = "def";
char* ret = strstr(arr1, arr2);
if (ret == NULL)
printf("找不到\n");
else
printf("找到了:%s\n", ret);
return 0;
}
通过strstr函数的使用,我们对此函数有了大概的了解,自己是否能手动实现strstr函数呢? 存在情况: 1. 一次就能匹配成功 2. 需要多次才能匹配成功 3. 找不到
#include<assert.h>
#include<stdio.h>
char* my_strstr(const char* str1, const char* str2)
{
assert(str1 && str2);
const char* s1 = str1;
const char* s2 = str2;
const char* count = str1;
if (*str2 == '0')
return str1;
while (*count)
{
s1 = count;
s2 = str2;
while (*s1 == *s2 && *s1 && *s2)
{
s1++;
s2++;
}
if (*s2 == '\0')
return count;
count++;
}
return NULL;
}
int main()
{
char arr1[] = "abcdefghi";
char arr2[] = "def";
const char* ret = my_strstr(arr1, arr2);
if (ret == NULL)
printf("找不到\n");
else
printf("找到了%s\n", ret);
return 0;
}
1. sep参数指向一个字符串,定义了用作分隔符的字符集合。
2. 第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标记。
3. strtok函数找到str中的下⼀个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。(注: strtok函数会改变被操作的字符串,所以被strtok函数切分的字符串⼀般都是临时拷贝的内容并且可修改。)
4. strtok函数的第⼀个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。
5. strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记。
6. 如果字符串中不存在更多的标记,则返回 NULL 指针。
//strtok函数的第一个参数不为(NULL函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。
//strtok函数的第一个参数为NULL,函数将在同一个字符串中被保存的位置开始,查找下一个标记。
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[] = "egoist@2023.com";
char sep[] = "@.";
char buf[30] = { 0 };
strcpy(buf, arr1);
char* p = NULL;
for (p = strtok(buf, sep);p != NULL;p = strtok(NULL, sep))
{
printf("%s\n", p);
}
return 0;
}
strerror 函数可以把参数部分错误码对应的错误信息的字符串地址返回来,即能够返回报错原因。
了解:在不同的系统和C语言标准库的实现中都规定了一些错误码,一般是放在 errno.h 这个头文件中说明 的,C语言程序启动的时候就会使用一个全局的变量errno来记录程序的当前错误码,只不过程序启动 的时候errno是0,表示没有错误,当我们在使用标准库中的函数的时候发生了某种错误,就会将对应 的错误码,存放在errno中,而一个错误码的数字是整数很难理解是什么意思,所以每⼀个错误码都是 有对应的错误信息的。strerror函数就可以将错误对应的错误信息字符串的地址返回。
可以发现perror函数不仅完成strerror函数的信息报错,并且能将前面的printf中的信息一并处理,自动加上了: 即perror = strerror + printf。