我已经定义了_GNU_SOURCE但是当我尝试将strcasestr放入我的函数时它只是说错误LNK2019:函数中引用了未解析的外部符号_strcasestr。我是否需要以某种方式导入特定的库或执行其他操作?我也尝试过定义:
//char *strcasestr(const char *haystack, const char *needle);
#define _GNU_SOURCE
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
我使用它的方式
if ((strcasestr(str1,str2)) != NULL)
{
//code
}
比较没有区分大小写的字符串的任何其他方法吗?
答案 0 :(得分:1)
strcasestr
是非标准功能。您与项目链接的库是什么?如果在Windows中使用MingW,则此功能可能无法使用,因为您的程序与Microsoft C运行时库链接。
可以在名称stristr
或_stristr
下使用相同的功能。
否则,您可能需要编写自己的版本。
这是一个非常简单的问题:
#include <stdlib.h>
#include <ctype.h>
char *strcasestr(const char *str, const char *pattern) {
size_t i;
if (!*pattern)
return (char*)str;
for (; *str; str++) {
if (toupper(*str) == toupper(*pattern)) {
for (i = 1;; i++) {
if (!pattern[i])
return (char*)str;
if (toupper(str[i]) != toupper(pattern[i]))
break;
}
}
}
return NULL;
}
答案 1 :(得分:1)
您能使用吗?
#include <shlwapi.h>
...
#define strcasestr StrStrIA
来自微软疯狂的文档页面:
“ StrStrIA函数:
查找字符串中子字符串的首次出现。比较不区分大小写。“
PCSTR StrStrIA(
PCSTR pszFirst,
PCSTR pszSrch
);
位置:
“参数:
pszFirst类型:PTSTR
指向要搜索的以空值结尾的字符串的指针。
pszSrch类型:PCTSTR
指向要搜索的子字符串的指针。”
请记住将shlawpi.lib添加到您的项目设置中,否则将无法链接。