字符串比较不在C中工作

时间:2012-12-03 20:59:18

标签: c string strcmp

我的程序中有一个函数,它应该采用莫尔斯代码输入,将它与字符串数组进行比较,并在找到匹配的莫尔斯后从相应的字符串返回一个字母。我终于设法让它在没有崩溃的情况下运行,但现在它不断返回错误的字母。例如...... ---应该返回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;
}

感谢您的帮助。

编辑:对不起,这是整个功能。

3 个答案:

答案 0 :(得分:5)

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

您可能需要0而不是1。或者只是说while (!strcmp(...))

答案 1 :(得分:5)

将strcmp()与0进行比较,而不是1.该函数仅在完全匹配时返回0。阅读手册! :)

答案 2 :(得分:1)

本声明:

letter[let_count+1]='\0';
如果输入(letter[9])长度为8个字符,则

正在写入mor

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

分配给letter[9]很可能导致您描述的seg-fault。

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