C Horspool算法

C Horspool算法,c,algorithm,C,Algorithm,我目前正在尝试用C语言实现horspool字符串匹配算法。它适用于小数据集,但由于某些原因,它不适用于大数据集 下面是我的createTable函数: void tableCreate(char* string, int table[]) { int i = 0; int length = strlen(string); for (i = 0; i < 500; ++i) { table[i] = length; } for (i

我目前正在尝试用C语言实现horspool字符串匹配算法。它适用于小数据集,但由于某些原因,它不适用于大数据集

下面是我的createTable函数:

void tableCreate(char* string, int table[]) {
    int i = 0;
    int length = strlen(string);

    for (i = 0; i < 500; ++i) {
        table[i] = length;
    }

    for (i = 0; i < length - 1; ++i) {
        table[string[i]] = length - i - 1;
    }
}

上述输出是在gdb中运行的print语句的结果。

这会在接近缓冲区末尾时导致溢出:

while (j <= stringLength - 1) {
    c = buffer[j + length - 1];

while(j)“不幸的是,我不能提供大数据集,因为它超过40000行”-然后开始缩小它,看看在演示错误的同时可以剪切什么。@user2357112我现在就开始这样做。这也值得显示您正在使用的搜索字符串。它有多长?其中有多少重复的子模式?大概比255字节短一点,因为这是您的行的长度你是否考虑过POSIX函数而不是<代码> FGETSH()/<代码>?或者没关系,因为输入行足够短,255不是问题吗?也许你应该在你的40000行样本的前5行和最后5行?@ JONAANDELFFLFER,我一直在使用“经济学”的搜索字符串。这将导致37的匹配。我将在线发布一份副本的文件格式,行数超过255。我还随意发布了一些与其他搜索检查的输出。我尝试通过字符串匹配运行“Apple”,结果导致了一个无限循环,其中j始终为48,表[c]始终为0,stringLength始终为78。
j: 48
stringLength: 78
length: 5
Shifting
j: 48
table[c]: 0
j: 48
stringLength: 78
length: 5
Shifting
j: 48
table[c]: 0
j: 48
stringLength: 78
length: 5
Shifting
j: 48
while (j <= stringLength - 1) {
    c = buffer[j + length - 1];
while (j <= stringLength - length) {
    c = buffer[j + length - 1];