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

Compare strcmp() against 0, not 1. the function will only return 0 with a full match. Read the manual! :)

于 2012-12-03T21:03:13.727 回答
5
while (strcmp (letter, morse[index])!=1)

您可能的意思是0而不是1. 或者只是说while (!strcmp(...))

于 2012-12-03T21:01:57.753 回答
1

这个说法:

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

letter[9]如果输入 ( mor) 的长度为 8 个字符,则正在写入。

您将字母声明为char letter[8];,因此唯一有效的指标是 [0] - [7]。

分配给letter[9]最有可能导致您描述的段错误。

在我看来,您希望字母最多包含 8 个数据字符,外加一个空终止符 ( \0)。这表明您应该将其声明为char letter[9];.

于 2012-12-03T22:01:39.553 回答