2017-09-05 12 views
-1
#include <Foundation/Foundation.h> 

int lookup (const struct entry dictionary[],const char search[], const int entries); 

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


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" } 
    }; 

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

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


int main (void) 
{ 
    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 ("The word %s is not in my dictionary.\n", word); 
    return 0; 
} 

enter image description here定義は、モジュールからインポートされなければならない「Darwin.POSIX.search」は

+0

引用符で囲まれた警告はどうやって手に入りますか?コンパイラでコンパイルするときは?例えば。 gcc? – Yunnosch

+0

ようこそ。ここにすべてのコードを追加してください。外部リソースへのリンクは歓迎されますが、追加としてのみです。また、問題をより詳細に記述してお読みください。https://stackoverflow.com/help/mcve –

+0

英語ではないコメントの掲載を中止してください。 Stack Overflowは英語のみのウェブサイトです。 –

答えて

1

を必要とする前に、あなたのコードは非常に多くの理由のために間違っています。

scanf ("%14s", &word); 

を使用して

char word[10]; 

のように定義された配列を使用して、で開始する

は非常に間違っています。

  • 配列変数のアドレスを渡す必要はありません。配列名は最初の要素へのポインタに減衰します。 scanf()の場合、%sは、変換された入力とヌル終端文字を保持するのに十分な長さの文字配列の先頭へのポインタとして引数を受け取ります。

  • サイズ9の文字列(ヌルターミネータ)を保持できるため、14文字をスキャンして保存することができます。これは無効なメモリアクセスであり、未定義の動作につながります。

つまり、scanf()コールの成功を確認していませんでした。 scanf()が失敗する場合は、不確定な値にアクセスします。

+0

私に私のコードを訂正してください。 –

+1

@АлександрБатинは誰も行けません。私はエラーを指摘している、あなたが問題に遭遇した場合、いくつかの努力を示してください、それを修正してください、喜んで助けてください。 –

0

最初に使用する前に、構造体タイプstruct entryの宣言を行う必要があります。これは、宣言の直前のプロトタイプにあります。

関連する問題