无法找出我的程序崩溃的原因

时间:2012-08-02 11:07:53

标签: c arrays

在Windows 7 64位上使用Dev C ++

我试图实现一个c程序,以最佳方式识别句子中出现次数最多的单词。 这就是我创造的......

 struct word{
    char *str;
    int count;
    };

int main()
{
    struct word words[10]={0};
    int i,j,flag=0,max=0;
    char *maxw=NULL,*arr[] = {"how","do","you","do"};


    for(i=0;arr[i];i++)
    {
        flag =0;
        for(j=0;words[j].count!=0;j++)
            if(strcmp(words[j].str,arr[i]) == 0 )
            {
                words[j].count++;
                flag = 1;
                break;
            }

        if(flag == 0){  
        words[j].str = arr[i];
        words[j].count++;
        }

        if (max < words[j].count){
        max = words[j].count;
        maxw=words[j].str;
        }
    }
    printf("\nMost occurrences is of %s with %d count",maxw,max);

    getch();
    return 0;
}

我已经想到的是,只有当最大出现的单词也是句子的最后一个单词时,程序才会崩溃,这与内存中固定字符串的地址有关。但我不确定这里到底发生了什么。此外,这是一个很好的解决方案,还是存在一些更优化的解决方案?

P.S。这不是家庭作业,我只是在练习一些编码。

1 个答案:

答案 0 :(得分:3)

您的指针数组不是以null结尾,但在您的循环中,您正在检查null,如:

for(i=0;arr[i];i++)

所以你应该null终止你的arr喜欢

char *maxw=NULL,*arr[] = {"how","do","you","do",NULL}