C语⾔(函数)学习之strstrstrcasestr ⼀、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>
c编程网#include <string.h>
int main(int argc, char *argv[])
{
char *res = strstr("xxxhost: www.baidu", "host");
if(res == NULL) printf("res1 is NULL!\n");
else printf("%s\n", res); // print:-->'host: www.baidu'
res = strstr("xxxhost: www.baidu", "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", "Host");
if(res == NULL) printf("res1 is NULL!\n");
else printf("%s\n", res); // print:-->'host: www.baidu'
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 *);
... ... // 这种⽅法也能消除编译时的警告信息
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论