我正在创建一个简单的程序来查找字典中的单词。
是否可以告诉我为什么在找不到单词时会产生分段错误?
我现在已经盯着它看了一个多小时。
#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;
}
答案 0 :(得分:2)
for(i = 0; 1 < entries; i++)
entries
始终为10
,因此程序永远不会结束此循环,从而使i
超出范围。请改用for(i = 0; i < entries; i++)
。