C语言(函数)学习之strstr strcasestr

一、strstr函数使用

[1] 函数原型

char *strstr(const char *haystack, const char *needle);

[2] 头文件

#include <string.h>

[3] 函数功能

搜索"子串"在"指定字符串"中第一次出现的位置

[4] 参数说明

haystack        -->被查找的目标字符串"父串"
needle          -->要查找的字符串对象"子串"

注:若needle为NULL, 则返回"父串"

[5] 返回值

(1) 成功找到,返回在"父串"中第一次出现的位置的 char *指针
(2) 若未找到,也即不存在这样的子串,返回: "NULL"

[6] 程序举例

#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
    char *res = strstr("xxxhost: www.baidu.com", "host");
    if(res == NULL) printf("res1 is NULL!\n");
    else printf("%s\n", res);    // print:-->‘host: www.baidu.com‘
    res = strstr("xxxhost: www.baidu.com", "cookie");
    if(res == NULL) printf("res2 is NULL!\n");
    else printf("%s\n", res);    // print:-->‘res2 is NULL!‘
    return 0;
}

[7] 特别说明

注:strstr函数中参数严格"区分大小写"

二、strcasestr函数

[1] 描述

strcasestr函数的功能、使用方法与strstr基本一致。

[2] 区别

strcasestr函数在"子串"与"父串"进行比较的时候,"不区分大小写"

[3] 函数原型

#define _GNU_SOURCE
#include <string.h>
char *strcasestr(const char *haystack, const char *needle);

[4] 程序举例

#define _GNU_SOURCE             // 宏定义必须有,否则编译会有Warning警告信息
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
    char *res = strstr("xxxhost: www.baidu.com", "Host");
    if(res == NULL) printf("res1 is NULL!\n");
    else printf("%s\n", res);     // print:-->‘host: www.baidu.com‘
    return 0;
}

[5] 重要细节

如果在编程时没有定义"_GNU_SOURCE"宏,则编译的时候会有警告信息

warning: initialization makes pointer from integer without a cast

原因:

strcasestr函数并非是标准C库函数,是扩展函数。函数在调用之前未经声明的默认返回int型

解决:

要在#include所有头文件之前加  #define _GNU_SOURCE   

另一种解决方法:(但是不推荐)

在定义头文件下方,自己手动添加strcasestr函数的原型声明

#include <stdio.h>
... ...
extern char *strcasestr(const char *, const char *);
... ...         // 这种方法也能消除编译时的警告信息
时间: 2024-08-26 04:44:37

C语言(函数)学习之strstr strcasestr的相关文章

swift语言-函数学习part1

1. 函数的定义和调用 函数的概念 函数是为了完成某种特定任务的代码块,给代码块起个有意义的名字,称之为函数名.当函数需要被执行的时候,调用这个名字就可以执行函数了.可以帮助程序模块化,减少代码冗余.帮助程序员更好理解程序. 函数的分类 (1)其他程序员已经封装过函数.如打印函数: println("Hello Swift") (2)程序员自己封装的函数. swift函数定义和调用的语法 这里注意swift函数和其他语言函数的区别: 首先函数要使用func关键字. 其次别的语言的函数先

c语言 函数 学习笔记

一 什么是函数 任何一个C语言程序都是由一个或者多个程序段(小程序)构成的.每个程序段都有自己的功能,我们一般称这些程序段为“函数”.所以,你可以说C语言程序是由函数构成的. 二函数的定义 1定义函数的目的 将一个常用的功能保存起来,方便以后用. 2定义函数的步骤 函数名:函数叫什么名字. 函数体:函数是干什么的,里面包含了什么代码. 3格式 固定格式 函数名 { 函数内容 } return 1作用: (1)退出函数 (2)返回一个具的体值. 函数使用注意点: (1)如果不明确声明返回值类型,默

学习LoadRunner之C语言函数

学习LoadRunner之C语言函数 Action() { /*strchr和strrchr的区别*/ /* char *strTest1="citms citms"; char *strTest2,*strTest3; //在strTest1中顺序查找字符t,当第一次碰到t的时候开始往后截取. strTest2=(char *)strchr(strTest1,'t'); lr_output_message("the first occurrence of t :%s &qu

初探swift语言的学习笔记四(类对象,函数)

作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/29606137 转载请注明出处 假设认为文章对你有所帮助,请通过留言或关注微信公众帐号fengsh998来支持我,谢谢! swift扩展了非常多功能和属性,有些也比較奇P.仅仅有慢慢学习,通过经验慢慢总结了. 以下将初步学习一下类的写法. 码工,最大爱好就是看码,而不是文字,太枯燥. // // computer.swift // swiftDemo // // C

C语言基础学习7:返回指针值的函数

一个函数可以返回一个整型值.字符值.实型值等,也可以返回指针型的数据,即地址,返回的是指针类型. 返回指针值的函数的一般定义形式为; 数据类型 *函数名(参数列表) 例如: int *a(int x, int y); a作为函数名,调用它之后能得到一个指向整型数据的指针(地址). ()优先级高于*,因此a先与()结合,这是函数形式,返回值为指针形式. 1 #include <stdio.h> 2 float *search(float (*pointer)[4]); 3 float *sear

C语言函数手册学习

目录 1.字符测试函数 2.字符串操作函数 3.内存管理函数 4.日期与时间函数 5.数学函数 6.文件操作函数 7.进程管理函数 8.文件权限控制函数 9.信号处理函数 10.接口处理函数 11.环境变量函数 12.终端控制函数 总结:这次偶然间找到了C语言函数手册,看他分类分的很清楚,就花了几个小时学一下,具体的函数讲解可以点击链接查看,或者查找手册,常用的函数就是我知道已经碰到过的函数,或者是用过的函数. 1.字符测试函数 1.1 isxdigit() 1.2 isupper() 1.3i

初探swift语言的学习笔记(类对象,函数)

swift扩展了很多功能和属性,有些也比较奇P.只有慢慢学习,通过经验慢慢总结了. 下面将初步学习一下类的写法. 码工,最大爱好就是看码,而不是文字,太枯燥. // // computer.swift // swiftDemo // // Created by apple on 14-6-8. // Copyright (c) 2014年 fengsh. All rights reserved. /* 写本例子的目的在于快速学习swift类的写法,包括知识点: 1.属性设置 2.构造.释构 3.

C语言基础学习6: 指向函数的指针

1.函数指针变量调用函数 1 #include <stdio.h> 2 int max(int x, int y); 3 int max(int x, int y) 4 { 5 int z; 6 if(x<y) 7 z = y; 8 else 9 z = x; 10 return z; 11 } 12 void main() 13 { 14 int a,b,c; 15 scanf("a=%d,b=%d",&a,&b); 16 c = max(a,b);

C语言文件的读入与写入及C#基础函数学习[图]

C语言文件的读入与写入及C#基础函数学习[图]学了一学期的C语言,还不怎么会使用指针,文件的读入和写入也不能很顺利的写出来,说起来好惭愧.碰巧今天朋友让我帮他编写一个C语言程序,对他数模要用到的大量数据求平均值(每天不同时刻对某一物理量进行检测,持续几十天,求那些时刻测得的物理量的平均值).代码很简单,关键是要掌握怎样对文件进行读入和写入(当然对于菜鸡的我来说,懒惰让我在大一没有好好学习,正好趁着这个契机把文件的基本的操作学会:))分模块来编写还是很重要的,可以使程序看起来简洁明了.写了两个函数