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