我已经做了一些代码,但它无法正常运行
到目前为止我做了什么
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]=' ';
printf("Enter word to convert to morse code: n");
scanf("%s", string1);
while (string1!=' ')
{
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: %sn",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;
}
函数键读取应该将莫尔斯字符串分成 4 个字符 并将其传递给morse2english
函数,该函数应该找到莫尔斯电码的字母表示形式 并将其返回到KeyRead函数并将其添加到string4
我把问题放在评论中,但问题太多了!你真的需要回去研究更多 - 特别是关于动态内存分配!
在密钥读取 1 中:
- 所有带有错误定位缓冲区的 strcpy 内容都是不必要的。 例如:你为 string3 提供了 20 个字节,但在你使用它之前,你说 string3=...,所以这是一个即时泄漏!
- 而 (string1 != '\0') 不是比较苹果与苹果:字符串 1 是一个指针,\0 是一个字符。您可能意味着 *string1,但您从不修改 string1,因此循环不会结束。
- 您永远不会在循环中修改 a,因此不会附加到 string4
- morse2english 的结果是动态分配的,但你永远不会释放它。
在莫尔斯2英语中:
你- malloc 一个 26 的数组,(它不允许空终止符,所以你有一个缓冲区溢出)
- 你永远不会释放 azarray - 为什么 malloc 首先,你不修改它,所以字符串文字会起作用。
- 莫尔塞雷的同上(我没有数过,但你不改变它,所以不需要 malloc 和 strcpy) for 循环
- 似乎是乱码:对于所有莫尔斯电码中的每个单独字符,查看输入(并修改 for 循环使用的索引)