strcasestr在C中是如何工作的,保持获得错误外部符号

nnt7mjpx  于 2023-01-01  发布在  其他
关注(0)|答案(2)|浏览(190)

我已经定义了_GNU_SOURCE,但是当我尝试将strcasestr放入我的函数时,它只显示error 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
    }

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

cig3rfwq

cig3rfwq1#

strcasestr是一个非标准函数。您要将哪个库链接到您的项目?如果您在Windows中使用MingW,此函数可能不可用,因为您的程序链接到Microsoft C运行时库。
相同的功能可以在名称stristr_stristr下在那里可用。
否则,您可能必须编写自己的版本。
下面是一个非常简单的例子:

#include <stdlib.h>
#include <ctype.h>

char *strcasestr(const char *str, const char *pattern) {
    size_t i;
    unsigned char c0 = *pattern, c1, c2;

    if (c0 == '\0')
        return (char *)str;

    c0 = toupper(c0);
    for (; (c1 = *str) != '\0'; str++) {
        if (toupper(c1) == c0) {
            for (i = 1;; i++) {
                c2 = pattern[i];
                if (c2 != '\0')
                    return (char *)str;
                c1 = str[i];
                if (toupper(c1) != toupper(c2))
                    break;
            }
        }
    }
    return NULL;
}
t40tm48m

t40tm48m2#

你能不能用:

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

来自微软疯狂的文档页面:
"StrStrIA函数:
查找字符串中第一个出现的子字符串。比较不区分大小写。"

PCSTR StrStrIA(
  PCSTR pszFirst,
  PCSTR pszSrch
);

其中:
"参数:
psz第一类型:PTSTR
指向要搜索的以空值结尾的字符串的指针。
psz搜索类型:PCR扩增
指向要搜索的子字符串的指针。"
记住把shlawpi.lib添加到你的项目设置中,否则它就不会链接。

相关问题