首页 > 解决方案 > 程序在我打印出值时有效,但在我不打印时无效

问题描述

我有以下程序正在检查子字符串。

#include <stdio.h>

#define TRUE 1
#define FALSE 0

int checkSubstring(char string[], char sub[]) {
    int k, j = 0;
    int count = 0;

    for(int i = 0; i<=8; i++) {
         if(sub[k] == string[i]) {
            j = j + 1;
            k = k + 1;
            count = count + 1;
        }
        else {
            j = i;
        }
    }

    printf("%d", count);

    if(count == 3) {
        return TRUE;
    }
    else {
        return FALSE;
    }
}

我正在测试我的程序,它似乎只有在我这样做时才有效printf("%d", count);

例如,如果我针对“bus”测试字符串“Schoolbus”,它应该返回 TRUE,因为 bus 是 Schoolbus 中的子字符串。但是,它仅在 printf 语句到位时才返回 true。当我注释掉它时,它返回 FALSE。我不知道为什么会这样做……我在循环中使用 8 来测试校车的长度(9)。我还在检查 count 是否 == 3,因为如果字符串匹配,我可以将其计数到子字符串的长度。如果计数与长度不匹配,那么我们知道它不匹配。

标签: cprintf

解决方案


正如@yano 所指出的,k未初始化,因此sub[k]具有未定义的行为。

j要将两者都初始化k为零,您可以这样做

int j = 0, k = 0;

或者

int j, k;
j = k = 0;

不是

int k, j = 0;

推荐阅读