linux服务器开发笔记(日志部分)strrchr()及strchr()
一 比较 strchr()和strrchr()函数
char *strchr(const char *s, int c);
它表示在字符串 s 中查找字符 c,返回字符 c 第一次在字符串 s 中出现的位置,如果未找到字符 c,则返回 NULL。也就是说,strchr 函数在字符串 s 中从前到后(或者称为从左到右)查找字符 c,找到字符 c 第一次出现的位置就返回,返回值指向这个位置,如果找不到字符 c 就返回 NULL。
har *strrchr(const char *s, int c);
与 strchr 函数一样,它同样表示在字符串 s 中查找字符 c,返回字符 c 第一次在字符串 s 中出现的位置,如果未找到字符 c,则返回 NULL。但两者唯一不同的是,strrchr 函数在字符串 s 中是从后到前(或者称为从右向左)查找字符 c,找到字符 c 第一次出现的位置就返回,返回值指向这个位置。下面的示例代码演示了两者之间的区别:
PS:简单来讲就是strchr()和strrchr就是判断第二个参数是否为第一个参数的子字符串;如果不是返回NULL;如果是,strchr()从前往后查找,找到返回当前位置的地址,而strrchr()从后往前查找,找到返回当前地址;
其中第二个参数不仅可以是字符串,也可以为字符。
二测试代码
int main(void)
{
char str[] = "I welcome any ideas from readers, of course.";
char *fc = strchr(str, 'o');
printf("strchr: %s\n", fc);
char *rc = strrchr(str, 'o');
printf("strrchr: %s\n", rc);
return 0;
}
示例代码运行结果为:
strchr: ome any ideas from readers, of course.
strrchr: ourse.
三 使用strrchr()从当前目录查找文件地址
假设file_name为 Server_log
const char *p = strrchr(file_name, '/home/Server_log');
if(p==NULL)
{
printf("/home/路径下下没有Server_log\n");
}
else
{
printf("/home/路径下有%s\n",file_name);
printf("p对应的地址为%s\n",p);
}
假设在存在/home/Server_log则打印结果为:
/home/路径下有Server_log
p对应的地址为g
假设file_name为const char *型的数据
如果我们想要使用strrchr查找文件是否在指定目录存在,需要指定为绝对路径
strrchar()函数成功返回file_name首地址,失败返回NULL