c语言 - 当我打印出值时程序有效,但当我不打印时不起作用



我有下面的程序来检查子字符串

#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);时才有效。

例如,如果我测试字符串"Schoolbus"对于&;bus&;,它应该返回TRUE,因为bus是Schoolbus的子字符串。但是,只有当printf语句就位时,它才返回true。当我把它注释掉时,它返回FALSE。我不知道它为什么要这样做……我在循环中使用8来测试schoolbus(9)的长度。我还检查count是否== 3,因为如果字符串匹配,我可以计数到子字符串的长度。如果计数与长度不匹配,则我们知道它不匹配。

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

要将jk初始化为零,您可以执行

int j = 0, k = 0;

int j, k;
j = k = 0;

不,

int k, j = 0;

最新更新