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);
。
例如,如果我针对“bus”测试字符串“Schoolbus”,它应该返回 TRUE,因为 bus 是 Schoolbus 中的子字符串。但是,它仅在 printf 语句到位时才返回 true。当我注释掉它时,它返回 FALSE。我不知道为什么会这样做……我在循环中使用 8 来测试校车的长度(9)。我还在检查 count 是否 == 3,因为如果字符串匹配,我可以将其计数到子字符串的长度。如果计数与长度不匹配,那么我们知道它不匹配。
解决方案
正如@yano 所指出的,k
未初始化,因此sub[k]
具有未定义的行为。
j
要将两者都初始化k
为零,您可以这样做
int j = 0, k = 0;
或者
int j, k;
j = k = 0;
但不是
int k, j = 0;
推荐阅读
- spring - Spring批处理分类器复合项目编写器出错
- paypal - PayPal Plus:抱歉,由于技术原因,目前无法处理任何付款
- javascript - 从单个文本框中分离值
- python - python中的不同变量赋值
- laravel - laravel carbon 之间的日期无法正常工作
- google-app-engine - 谷歌云启动盘空间不匹配
- ssl - HAProxy 443 在 SSL 握手期间出现连接错误
- c - 如何拆分数字字符串,然后将其存储在 c 中的 int 数组中?
- python - 将带有 = 的值字符串转换为单个字典
- html - 在 Angular 中切换侧边栏