是不是vc的strcat函数有问题???

zsl6658 2005-11-20 09:21:34
下边的函数求两个字符串的最长相同子串,但是就是不出结果为何?
我跟了一下发现在strcat函数有问题,出现一大堆汇编,我看不懂,求高手指点.
我是在vc6.0下编译的,跟到一个intel strcat.asm文件就不懂了.
#include "stdio.h"
#include "stdlib.h"
#include "string.h"

#define MAXLENGTH 100

char* commonstring(char* str1,char* str2)
{
char* temp=(char*)malloc(sizeof(char)*20);

//如果任意一个字符串到达结尾,退出递归;返回空字符串;
if((*str1=='\0')||(*str2=='\0'))
return (char*)0;

//当两个字符串的首字母相等,则最大子串
//等于首字母加上两个字符串都去掉首字母的最大子串;
if(*str1==*str2)
{
char* temp3=commonstring(str1+1,str2+1);
char* temp4=(char*)malloc(sizeof(char)*2);
*temp4=*str1;
temp4++;
*temp4='\0';
temp=strcat(temp4,temp3);


}
//如果两个字符串的首字母不相等,则等于第一个字符串去掉首字母与第二个字符串的
//最大子串和第一个字符串与第二个字符串去掉首字母的最大子串中比较长的一个.
else
{
char *temp1,*temp2;
temp1=commonstring(str1+1,str2);
temp2=commonstring(str1,str2+1);
int len1=strlen(temp1);
int len2=strlen(temp2);
temp=len1>len2?commonstring(str1+1,str2):commonstring(str1,str2+1);

}
return temp;

}
int main(int argc, char* argv[])
{
char* str1="abcdef";
char* str2="bcde";
char* result=NULL;
result=commonstring(str1,str2);
printf("the commonstring is %s;\n",result);
char* str3=substr(str1,1,strlen(str1)-1);
printf("%s\n",str3);

free(result);
return 0;
}
...全文
350 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
0黄瓜0 2005-11-21
  • 打赏
  • 举报
回复
逻辑上好象有点问题。
zsl6658 2005-11-21
  • 打赏
  • 举报
回复

#include "stdio.h"
#include "stdlib.h"
#include "string.h"

#define MAXLENGTH 100

char* commonstring(char* str1,char* str2)
{
char* temp=(char*)malloc(sizeof(char)*20);

//如果任意一个字符串到达结尾,退出递归;返回空字符串;
if((*str1=='\0')||(*str2=='\0'))
return (char*)0;

//当两个字符串的首字母相等,则最大子串
//等于首字母加上两个字符串都去掉首字母的最大子串;
if(*str1==*str2)
{
char* temp3=commonstring(str1+1,str2+1);
char* temp4=(char*)malloc(sizeof(char)*20);
*temp4=*str1;
temp4++;
*temp4='\0';
temp=strcat(temp3,temp4);


}
//如果两个字符串的首字母不相等,则等于第一个字符串去掉首字母与第二个字符串的
//最大子串和第一个字符串与第二个字符串去掉首字母的最大子串中比较长的一个.
else
{
char *temp1,*temp2;
temp1=commonstring(str1+1,str2);
temp2=commonstring(str1,str2+1);
int len1=strlen(temp1);
int len2=strlen(temp2);
temp=len1>len2?commonstring(str1+1,str2):commonstring(str1,str2+1);

}
return temp;

}
int main(int argc, char* argv[])
{
char* str1="abcdef";
char* str2="bcde";
char* result=NULL;
result=commonstring(str1,str2);
printf("the commonstring is %s;\n",result);

free(result);
return 0;
}


改成现在这样,错误依然,不解?????,还是高手仔细指点,小弟很菜!!!!
dexterHUST 2005-11-21
  • 打赏
  • 举报
回复
楼主想让temp3接到temp4的后面,但是只给temp4分配了2个字节的空间。

这里注意了,strcat不是把temp3、temp4的内存接在一起,他只不过对temp3的字符串做一个copy然后接到temp3后面,这个首先temp4要有位置放temp3的内容,否则走到这一步自然编译器会报错。

后面具体就没看了
ma100 2005-11-21
  • 打赏
  • 举报
回复
// return (char*)0;
return "";


*temp4='\0';
temp4--;
temp=strcat(temp4,temp3);

//free(result);

malloc --> 直接用叔祖
lxb365 2005-11-20
  • 打赏
  • 举报
回复
if(*str1==*str2)这个不对吧,怎么能直接用==呢?应该用strcmp()啊
csucdl 2005-11-20
  • 打赏
  • 举报
回复
char* temp4=(char*)malloc(sizeof(char)*2);
你就分配了两个字节怎么够用啊
zsl6658 2005-11-20
  • 打赏
  • 举报
回复
倒数递三四行不要,我忘了删了!!!

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧