Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么我会过度积累?_C_String_For Loop_Compare_Accumulator - Fatal编程技术网

C 为什么我会过度积累?

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;

这里的noob很困惑。有人能解释为什么我@12和我@13在积累吗? 我的函数应该查看两个字符串,看看第二个字符串是否包含在第一个字符串中。我通过在两个字符串中循环并比较String1和String2中该索引处的字符来实现这一点。如果累加器的计算结果为较短字符串的长度,则函数将返回1并打印:“it works.”否则将返回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