为什么这会给我一个分段错误?

时间:2016-07-24 12:39:24

标签: c segmentation-fault

我正在创建一个简单的程序来查找字典中的单词。

是否可以告诉我为什么在找不到单词时会产生分段错误?

我现在已经盯着它看了一个多小时。

#include <stdio.h>
#include <stdbool.h>

struct entry
{
    char word[15];
    char definition[50];
};

bool equalStrings(const char s1[], const char s2[]);
int lookup(const struct entry dictionary[], const char search[], const int entries);

int main(void)
{
    const struct entry dictionary[100] =
        {{ "aardvark", "a burrowing African mammal"},
         { "abyss", "a bottomless pit"},
         { "acumen", "mentally sharp; keen"},
         { "addle", "to become confused"},
         { "aerie", "a high nest"},
         { "affix", "to append; attach"},
         { "agar", "a jelly made from seaweed"},
         { "ahoy", "a nautical call of greeting"},
         { "aigrette", "an ornamental cluster of feathers"},
         { "ajar", "partially opened"}};


    char word[10];
    int entries = 10;
    int entry;

    printf("Enter word: ");
    scanf("%14s", word);
    entry = lookup(dictionary, word, entries);

    if(entry != -1)
        printf("%s\n", dictionary[entry].definition);
    else
        printf("Sorry, the word %s is not in my dictionary\n", word);

    return 0;
}

bool equalStrings(const char s1[], const char s2[])
{
    int i = 0;
    bool areEqual;

    while(s1[i] == s2[i] && s1[i] != '\0' && s2[i] != '\0')
    {
        i++;
    }
        if(s1[i] == '\0' && s2[i] == '\0')
            areEqual = true;
        else
            areEqual = false;

    return areEqual;
}

int lookup(const struct entry dictionary[], const char search[], const int entries)
{
    int i;
    bool equalStrings(const char s1[], const char s2[]);

    for(i = 0; 1 < entries; i++)
    {
        if(equalStrings(search, dictionary[i].word))
        {
            return i;
        }
    }       
    return -1;
}

1 个答案:

答案 0 :(得分:2)

for(i = 0; 1 < entries; i++)

entries始终为10,因此程序永远不会结束此循环,从而使i超出范围。请改用for(i = 0; i < entries; i++)