繁体   English   中英

C 中的 strcasestr 如何工作。 不断收到错误外部符号

[英]How does strcasestr in C work. Keep getting Error external symbol

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

还有其他方法可以比较不区分大小写的字符串吗?

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((unsigned char)*str) == toupper((unsigned char)*pattern)) {
            for (i = 1;; i++) {
                if (!pattern[i])
                    return (char*)str;
                if (toupper((unsigned char)str[i]) != toupper((unsigned char)pattern[i]))
                    break;
            }
        }
    }
    return NULL;
}

你能不能只用:

#include <shlwapi.h>
...
#define strcasestr StrStrIA 

来自微软疯狂的文档页面:

"StrStrIA 函数:

查找字符串中子字符串的第一次出现。 比较不区分大小写。”

PCSTR StrStrIA(
  PCSTR pszFirst,
  PCSTR pszSrch
);

在哪里:

“参数:

pszFirst 类型:PTSTR

指向正在搜索的以空字符结尾的字符串的指针。

pszSrch 类型:PCTSTR

指向要搜索的子字符串的指针。”

请记住将 shlawpi.lib 添加到您的项目设置中,否则它不会链接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM