在m中将莫尔斯电码转换为英语

时间:2012-11-16 11:42:27

标签: c pointers loops malloc morse-code

我已经完成了一些代码,但它无法正常运行

到目前为止我做了什么

void keyread1(void)
{
    char *string1= (char*) malloc (20);//char pointer pointing to allocated memory
    char *string2= (char*) malloc (20);
    char *string3= (char*) malloc (20);
    char *string4= (char*) malloc (20);
    string4[0]='\0';
    printf("Enter word to convert to morse code: \n");
    scanf("%s", string1);
    while (string1!='\0')
    {
        int z=0,a=0;
        strncpy(string2+a, string1+z,4 );
        string3=morse2english(string2);
        strncat(string4+a,string3,1);
        z=z+4;
    }
    printf("morse code string: %s\n",string4);
    free(string1);
    return;
}

char *morse2english(char *morsecode)
{
    int j=0;
    int a=0;
    char *azarray=(char*)malloc(26);
    strcpy(azarray, "abcdefghijklmnopqrstuvwxyz");
    char *morsearray=(char*)malloc(104*sizeof(char));
    strcpy(morsearray, ".-  -...-.-.-.. .   ..-.--. ......  .----.- .-..--  -.  --- .--.--.-.-. ... -   ..- ...-.-- -..--.----..");
        for (int i = 0; i < 104; ++i )
    for(int j=0;j<4;j++)
    if((morsecode[j++] == morsearray[i++]))
    a =((morsearray[i-4])/4);
    char *ch =(char*)malloc(1*sizeof(char));
    ch=azarray+a;
    return ch;
}

函数keyread应该将莫尔斯字符串分成4个字符 并将其传递给morse2english函数,该函数应该找到莫尔斯代码的字母表示 并将其返回到keyread函数并将其添加到string4

1 个答案:

答案 0 :(得分:0)

我把问题放在评论中,但是有太多了!你真的需要回去学习更多 - 特别是关于动态内存分配!

keyread1中的

  • 没有必要使用malloced缓冲区的所有strcpy东西。例如:你为mall3使用了malloc 20个字节,但是在你使用它之前你说string3 = ...,所以它是一个瞬间泄漏!
  • while(string1!='\ 0')不是比较苹果和苹果:字符串1是指针,\ 0是字符。你可能意味着* string1,但是你永远不会修改string1,所以循环不会结束。
  • 您永远不会修改循环中的a,因此您不会附加到string4
  • morse2english的结果是动态分配的,但你永远不会释放它。

in morse2english:

  • 你malloc是一个26的数组(它不允许空终止符,所以你有一个缓冲区溢出)
  • 你永远不会释放azarray - 为什么首先要使用malloc,你不要修改它,所以字符串文字可以工作。
  • 同样适用于morsearray(我不算数,但你不改变它,所以不需要malloc和strcpy)
  • for循环似乎是乱码:对于所有摩尔斯电码中的每个字符,查看输入(并修改for循环使用的索引)