2016-07-24 10 views
-2

Ich erstelle ein einfaches Programm, um ein Wort in einem Wörterbuch nachzuschlagen.Warum gibt mir das einen Segmentierungsfehler?

Können Sie mir bitte sagen, warum dies einen Segmentierungsfehler erzeugt, wenn das Wort nicht gefunden wird?

Ich habe das seit über einer Stunde starrt.

#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

Bitte zeigen Sie Ihre Forschung/Debugging-Aufwand so weit. Bitte lesen Sie zuerst die [Ask] -Seite. –

+1

'1 'char word [15];' – BLUEPIXY

+0

Warum haben Sie 'equalStrings' implementiert, anstatt das allgemeine Idiom' strcmp (s1, s2) == 0' zu verwenden? –

Antwort

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

entries ist immer 10 so wird das Programm nie diese Schleife beenden, so i außerhalb der Grenzen zu bekommen. Verwenden Sie stattdessen for(i = 0; i < entries; i++).