- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
所以我通读了其他问题,他们被告知在任何 include 之前放置 #define _GNU_SOURCE
并且它可以工作,但它对我不起作用。我也尝试添加 #define _GNU_SOURCE char *strcasetr(const char *haystack, const char *needle);
但仍然不起作用。我找不到关于此的任何其他信息,也许有人可以提供帮助吗?提前致谢。
错误:函数“strcastr”的隐式声明
/**
*
* Description: This is code for Lab 3 Task 2.
* Reads data from file and gives opportunity to search by cities
*/
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
printf("Please input the city you want to find employees in:");
scanf("%s", input);
maxline = i;
for (i = 0; i <= maxline; i++) {
if (strcasestr(employee[i].city, input) != 0) { // PROBLEM
printf("%d %s %s %s\n", &employee[i].ID, employee[i].fn,
employee[i].ln, employee[i].city);
amount++;
}
}
printf("%d matches out of %d members", amount, maxline);
return 0;
}
最佳答案
strcasetr
函数在标准 Windows 构建环境中不可用。它不是 C 标准库的一部分,仅随特定平台和构建环境一起提供。
但是,您可以编写自己的版本。这是一个基于原始字符串匹配算法的简单算法。使用 Rabin-Karp、Boyer-Moore 或 Knuth-Morris-Pratt 算法可能会做得更好:
char* myStrcasestr(const char* haystack, const char* needle) {
/* Edge case: The empty string is a substring of everything. */
if (!needle[0]) return (char*) haystack;
/* Loop over all possible start positions. */
for (size_t i = 0; haystack[i]; i++) {
bool matches = true;
/* See if the string matches here. */
for (size_t j = 0; needle[j]; j++) {
/* If we're out of room in the haystack, give up. */
if (!haystack[i + j]) return NULL;
/* If there's a character mismatch, the needle doesn't fit here. */
if (tolower((unsigned char)needle[j]) !=
tolower((unsigned char)haystack[i + j])) {
matches = false;
break;
}
}
if (matches) return (char *)(haystack + i);
}
return NULL;
}
关于c - strcastr 仍然无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42354008/
以下代码: #include #include int main() { char *s = strdup("keep-alive"); if(strcasestr(s, "clo
我#include 但是当我调用strcasestr(src, search);我收到以下错误消息 implicit declaration of function ‘strcasestr’ .我如何
所以我通读了其他问题,他们被告知在任何 include 之前放置 #define _GNU_SOURCE 并且它可以工作,但它对我不起作用。我也尝试添加 #define _GNU_SOURCE cha
我已经定义了 _GNU_SOURCE,但是当我尝试将 strcasetr 放入我的函数时,它只是提示错误 LNK2019:函数中引用了未解析的外部符号 _strcasetr。我是否需要以某种方式导入特
我是一名优秀的程序员,十分优秀!