【发布时间】:2021-01-20 01:27:14
【问题描述】:
我有以下程序正在检查子字符串。
#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,因为如果字符串匹配,我可以将其计数到子字符串的长度。如果计数与长度不匹配,那么我们就知道它不匹配。
【问题讨论】:
-
k未初始化,因此sub[k]调用未定义的行为 -
等等,我以为我可以做 int k,j = 0;?我发誓我在某个地方看到过
-
你可以“做”它..它将
j初始化为0,但k是未初始化的,因此它将采用内存中该位置的任何值,这是完全不可预测的。如果你希望它从 0 开始,你也需要说k = 0。最好确保string和sub至少有 10 个字符长。