C 为什么我会过度积累?
这里的noob很困惑。有人能解释为什么我@12和我@13在积累吗? 我的函数应该查看两个字符串,看看第二个字符串是否包含在第一个字符串中。我通过在两个字符串中循环并比较String1和String2中该索引处的字符来实现这一点。如果累加器的计算结果为较短字符串的长度,则函数将返回1并打印:“it works.”否则将返回0 代码:C 为什么我会过度积累?,c,string,for-loop,compare,accumulator,C,String,For Loop,Compare,Accumulator,这里的noob很困惑。有人能解释为什么我@12和我@13在积累吗? 我的函数应该查看两个字符串,看看第二个字符串是否包含在第一个字符串中。我通过在两个字符串中循环并比较String1和String2中该索引处的字符来实现这一点。如果累加器的计算结果为较短字符串的长度,则函数将返回1并打印:“it works.”否则将返回0 代码: #include <stdio.h> #include <string.h> int main() { int accum = 0;
#include <stdio.h>
#include <string.h>
int main()
{
int accum = 0;
char string1[21];
char string2[9];
strcpy(string1, "The test for the lab");
strcpy(string2, "The test");
int j = (strlen(string1)-1);
for(int i = 0; i<=j; i++){
if(string1[i] == string2[i]){
accum += 1;
printf("accum is %d \n",accum);
printf("i is %d \n",i);
printf("string1[i] is %c \n",string1[i]);
printf("string2[i] is %c \n",string2[i]);
}
}
if (accum == strlen(string2)){
printf("it works!");
return 1;
}
else
return 0;
}
救命啊 当
i
大于strlen(string2)
时,您读取的是该字符串之外的内容。这会导致未定义的行为。您需要将j
设置为两个字符串中较短字符串的长度。
accum is 1
i is 0
string1[i] is T
string2[i] is T
accum is 2
i is 1
string1[i] is h
string2[i] is h
accum is 3
i is 2
string1[i] is e
string2[i] is e
accum is 4
i is 3
string1[i] is
string2[i] is
accum is 5
i is 4
string1[i] is t
string2[i] is t
accum is 6
i is 5
string1[i] is e
string2[i] is e
accum is 7
i is 6
string1[i] is s
string2[i] is s
accum is 8
i is 7
string1[i] is t
string2[i] is t
accum is 9
i is 12
string1[i] is
string2[i] is
accum is 10
i is 13
string1[i] is t
string2[i] is t