摩尔斯电码翻译器的文本有效但打印(空)

text to Morse code translator works but prints (null)

我想出了如何将用户输入翻译成摩尔斯电码。有用。唯一困扰我的是,无论我提供什么输入,在结果的末尾它都会显示 (null) 并且我不知道我必须更改我的代码才能摆脱它。我认为这可能是无法翻译的数组的结尾

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char* tableSetup();
char* all_Cap(char sentence[]);
char* trans_to_morse(char* morse[], int b);

int main()
{
    char* morse[1024];
    char sentence[256];


    fgets(sentence,256,stdin);
    all_Cap(sentence);

    int b=strlen(sentence);
    for(int i=0;i<b;i++){
            morse[i]=tableSetup(sentence[i]);
    }

    trans_to_morse(morse, b);

    return (0);
}

char* tableSetup(int i){
    char* table[256]={0};

    table['0']="-----";
    table['1']=".----";
    table['2']="..---";
    table['3']="...--";
    table['4']="....-";
    table['5']=".....";
    table['6']="-....";
    table['7']="--...";
    table['8']="---..";
    table['9']="----.";
    table['A']=".-";
    table['B']="-...";
    table['C']="-.-.";
    table['D']="-..";
    table['E']=".";
    table['F']="..-.";
    table['G']="--.";
    table['H']="....";
    table['I']="..";
    table['J']=".---";
    table['K']="-.-";
    table['L']=".-..";
    table['M']="--";
    table['N']="-.";
    table['O']="---";
    table['P']=".--.";
    table['Q']="--.-";
    table['R']=".-.";
    table['S']="...";
    table['T']="-";
    table['U']="..-";
    table['V']="...-";
    table['W']=".--";
    table['X']="-..-";
    table['Y']="-.--";
    table['Z']="--..";
    table['.']=".-.-.-";
    table[',']="--..--";
    table[':']="---...";
    table[';']="-.-.-.";
    table['?']="..--..";
    table['!']="-.-.--";
    table['-']="-....-";
    table['_']="..--.-";
    table['(']="-.--.";
    table[')']="-.--.-";
    table['"']=".-..-.";
    table['=']="-...-";
    table['+']=".-.-.";
    table['/']="-..-.";
    table['@']=".--.-.";
    table[' ']=".......";


    return(table[i]);
}

char* all_Cap(char sentence[]){
    int b=strlen(sentence);
    for(int i=0;i<b;i++){
        if(sentence[i]>=97 && sentence[i]<=122) sentence[i] -=32;
    }
    return(sentence);
}

char* trans_to_morse(char* morse[], int b){
    for(int i=0;i<b;i++){
        printf("%s ",morse[i]);
    }
    return(0);
}

结果:

How are you?
.... --- .-- ....... .- .-. . ....... -.-- --- ..- ..--.. (null)
Process returned 0 (0x0)   execution time : 6.915 s
Press any key to continue.

只需包含一个初始化行,上面写着

table[`\n`] = "";

问题是 fgets(3) 包含最后一个 \n 字符,因此您尝试打印它,而 \n 字符的 table 条目是NULL 与您在声明中分配的一样。

另一种解决方案是映射 table['\n'] = "\n";,这样一个换行符就被映射到一个只有 \n 的字符串中,您将把输出莫尔斯电码分成几行,就像您处理输入一样.