1

私のプログラムには、モールス信号の入力を受け取り、それを文字列の配列と比較し、一致するモールス信号が見つかったら、対応する文字列から文字を返す関数があります。ようやくクラッシュすることなく実行できるようになりましたが、今では間違った文字が返され続けています。たとえば...---... sosを返す必要がありますが、代わりにambを取得します。インデックス番号、モールス信号、文字を印刷してテストしてみたところ、すべて一致していたので、文字列比較に問題があると思います。

コードは次のとおりです。

void morsetotext(char mor[])
{
     char alpha[]={"abcdefghijklmnopqrstuvwxyz1234567890 "};
     char *morse[] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", 
     "..", ".---","-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", 
     "...", "-", "..-", "...-",".--", "-..-", "-.--", "--.","-----", ".----", 
     "..---", "...--", "....-",".....", "-....", "--...", "---..", "----." "/ "};
     char letter[8];
     char convert[250];
     int con_count=0;
     int let_count=0;
     int count=0;
     int index=0;
     int length=strlen(mor);

     while (count<length)
     {
           for(let_count=0; let_count<8 && mor[count]!=' '; let_count++)
           {
                            letter[let_count]=mor[count];
                            count++;
           }

           letter[let_count+1]='\0';

           index=0;
           while (strcmp (letter, morse[index])!=1)
           {
                 index++;
           }

           count++;

           printf ("%c", alpha[index]);
     } 
     return;
}

助けてくれてありがとう。

編集:申し訳ありませんが、これが関数全体です。

4

3 に答える 3

5
while (strcmp (letter, morse[index])!=1)

あなたはおそらく0の代わりに意味しました1。または単に言うwhile (!strcmp(...))

于 2012-12-03T21:01:57.753 に答える
5

strcmp() を 1 ではなく 0 と比較します。この関数は、完全一致の場合にのみ 0 を返します。説明書を読め!:)

于 2012-12-03T21:03:13.727 に答える
1

この文:

letter[let_count+1]='\0';

letter[9]入力 ( mor) が 8 文字の長さの場合に書き込み中です。

文字を として宣言しchar letter[8];たため、有効なインデックスは [0] - [7] のみです。

に割り当てるとletter[9]、説明したセグメンテーション違反が発生する可能性が最も高くなります。

文字に最大 8 つのデータ文字と 1 つのヌル ターミネータ ( ) を含めたいと思われます\0。として宣言する必要があることを示唆していますchar letter[9];

于 2012-12-03T22:01:39.553 に答える