0

すでにいくつかのコードを実行しましたが、正しく実行されません

私が今までやってきたこと

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

4

1 に答える 1

0

コメントに問題を入れていましたが、多すぎます。特に動的メモリ割り当てについては、戻ってもう少し勉強する必要があります。

keyread1 で:

  • malloced バッファを含むすべての strcpy は必要ありません。例: string3 に 20 バイトを malloc しますが、それを使用する前に string3=... と言うと、すぐにリークします!
  • while(string1 != '\0') はリンゴとリンゴを比較していません: 文字列 1 はポインタ、\0 は文字です。おそらく*string1を意味しますが、string1を変更することはないため、ループは終了しません。
  • ループ内で a を変更することはないため、string4 に追加することはありません
  • morse2english の結果は動的に割り当てられますが、解放することはありません。

morse2english で:

  • 26 の配列を malloc します (ヌル ターミネータを許可しないため、バッファ オーバーランが発生します)。
  • あなたは決して azarray を解放しません - そもそもなぜ malloc なのか、変更しないので、文字列リテラルが機能します。
  • morsearray の同上 (数えませんでしたが、変更しないので、malloc と strcpy は必要ありません)
  • for ループは意味不明のようです: すべてのモールス信号の個々の文字について、入力を調べます (そして、for ループで使用されるインデックスを変更します)。
于 2012-11-16T11:55:56.817 に答える