我已经完成了一些代码,但无法正常运行
到目前为止我做了什么
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
最佳答案
我在评论问题,但是太多了!您确实需要回过头来研究更多内容-尤其是关于动态内存分配!
在keyread1中:
不需要所有带有malloc缓冲区的strcpy东西。例如:您为string3分配了20个字节,但是在使用它之前,您说string3 = ...,所以这是一个即时泄漏!
while(string1!='\ 0')不能将apples与apples进行比较:string 1是一个指针,\ 0是一个字符。您可能的意思是* string1,但是您永远都不会修改string1,因此循环不会结束。
您永远不会在循环中修改a,因此不会在字符串4后面追加
morse2english的结果是动态分配的,但您永远不会释放它。
在morse2english中:
您分配了一个26的数组(不允许使用空终止符,因此缓冲区溢出)
您永远不会释放azarray-为什么首先要使用malloc而不修改它,所以字符串文字会起作用。
morsearray的同上(我没有计算,但您没有更改,因此无需malloc和strcpy)
for循环看起来很乱:对于所有摩尔斯电码中的每个字符,请查看输入(并修改for循环使用的索引)
关于c - 在C中将摩尔斯电码转换为英语,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13415907/