【发布时间】:2015-01-25 16:25:01
【问题描述】:
我编写了一个递归函数,它获取 3 个字符串,其中两个按字母顺序排序,第三个分配用于将前两个字符串放入第三个字符串中。字母顺序应保持不变;例如:
s1="abbcde";
s2="bckj";
所以,
s3="abbbccdekj";
这是main()中第三个字符串的分配:
char *s3 = (char*)malloc(len*sizeof(char));
SS1together(s1,s2,s3);//send to recursive function 3 strings
这就是函数:
void SS1together(char *s1, char*s2, char*s3)
{
if (s1 == NULL || s2 == NULL)
{
if (s1 == NULL)
{
s3[0] = s2[0];
SS1together(s1, s2 + 1, s3 + 1);
}
else
{
s3[0] = s1[0];
SS1together(s1 + 1, s2, s3 + 1);
}
}
if (s1 != NULL && s2 != NULL)
{
if (s1[0] <= s2[0])
{
s3[0] = s1[0];
SS1together(s1 + 1, s2, s3 + 1);
}
else
{
s3[0] = s2[0];
SS1together(s1 , s2 + 1, s3 + 1);
}
}
}
显示是内存的问题,但是找不到。
我分配的字符串 3,在 main 函数中,还有一个可以完美运行的函数,所以我把 main 放在了全图:
void main()
{
char *s1[N], *s2[N], *s3[N];//N=30 ,it is define in the top
int ans, len;
printf("Please enter your string s1 and then string s2\n");
gets(s1);
gets(s2);
len = strlen(s1) + strlen(s2);
if ((CheckS(s1) == 0) || (CheckS(s2) == 0))
printf("Not sorted\n");
else
{
char *s3 = (char*)malloc(len*sizeof(char));
SS1together(s1,s2,s3);
puts(s3);
free(s3);
}
_getch();
}
【问题讨论】:
-
你没有展示
len是如何计算的(它必须是strlen(s1) + strlen(s2) + 1),你也没有展示输出字符串是如何以空值结尾的(尽管它可能会自动发生——我'在声称它没有之前有一些事情要做;但我担心如果s2[0] == '\0'同时s1[0] == '\0',第一个if子句中的递归。 -
看起来您只是在尝试做something like this,这可能比您最初想象的要简短)。而且您发布的代码在分配
s3时缺少+1,以说明随后的终止符。 -
这种行:'s3[0] = s2[0];'不复制字符串,它复制的只是字符串的第一个字节。实际需要的是:'strcpy(s3, s2);'并且 s3 需要是 s3 = malloc( strlen(s1)+strlen(s2)+1);注意:sizeof(char) 总是 1