strcasestr在C中是如何工作的。继续获取错误外部符号

时间:2016-02-27 20:05:25

标签: c

我已经定义了_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
    }

比较没有区分大小写的字符串的任何其他方法吗?

2 个答案:

答案 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添加到您的项目设置中,否则将无法链接。