再出100分救急: c语言中字符串连接问题

HitXU 2003-08-22 05:10:57
我要完成 字符串(i) = 字符串(i-1) + 字符串(i-2)
这样一个叠代,生成一个字符串序列,也就是兔子序列。

我的代码如下:

#define LEN 1024

int main()
{
char *f1, *f2, *f3;
int loop;
f1 = (char *)malloc(LEN);
f2 = (char *)malloc(LEN);
f3 = (char *)malloc(LEN);

f1 = "a";
f2 = "b";

for (loop = 0; loop < 10; loop++)
{
strcpy(f3, f2);
strcat(f3, f1);
f1 = f2;
f2 = f3;
}
printf("%s\n", f3);
}

循环第一遍时结果正确,第二遍结果也正确,第三遍结果就不对了,而从第四遍循环就出问题了,连个错误的结果都没有了。

这是怎么回事呀????


大侠们救命!!!!!!!!!!!!!!!!!!
...全文
149 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
HitXU 2003-08-23
  • 打赏
  • 举报
回复
十分感激各位的解答。
谢谢。
yorky 2003-08-22
  • 打赏
  • 举报
回复
hellobcb的程序也有问题,由于只给fp1赋了一个字符'a',而没有字符串结束符'\0',这时候fp1的长度是1048(为什么不是1024我也不知道),这样下来在第一轮循环后,fp2的长度就达到2096,在第二轮一开始,strcpy(fp3,fp2);就已经出现了字符数组越界错误了。
bm1408 2003-08-22
  • 打赏
  • 举报
回复
用STRING!
Dragon132 2003-08-22
  • 打赏
  • 举报
回复
可以实现了

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define LEN 1024

int main()
{
char *f1,*f2,*f3;
int loop;
f1 = (char *)malloc(LEN);
f2 = (char *)malloc(LEN);
f3 = (char *)malloc(LEN);

strcpy(f1,"a");
strcpy(f2,"b");

for (loop = 0; loop < 10; loop++)
{
strcpy(f3, f2);
strcat(f3, f1);
strcpy(f1,f2);
strcpy(f2,f3);
//f1 = f2;
//f2 = f3;
}
printf("%s\n", f3);
free(f1);
free(f2);
free(f3);
}
hellobcb 2003-08-22
  • 打赏
  • 举报
回复
楼上说的很好,fp1="a",相当于fp1又指向另一块空间。
像我这样*fp1='a'就可以了。
我也忘了free,不好意思!
qhgary 2003-08-22
  • 打赏
  • 举报
回复
改正方法上面已经说了,我来说说原因吧:
fp1=(char *)malloc(LEN); //系统分配给了fp1一块地方
fp1="a";//fp1说,我不要你分给我的空间,我就喜欢"a"

要知道"a"这样的字符串,编译器也有地址存放的,fp1="a"实际上是让fp1保存了,这个字符串常量"a"的地址,看到这里就不用往下再看,知道肯定错了。
那如何把这个字符串放到fp1申请的空间中去呢,就是用strcpy函数,上面已经说的很清楚了。
还有,你申请了空间,注意要释放掉,否则就内存泄露了
ezhou 2003-08-22
  • 打赏
  • 举报
回复
你为什么光malloc不free?
hellobcb 2003-08-22
  • 打赏
  • 举报
回复
#include <stdio.h>
#define LEN 1024
main()
{
char *fp1,*fp2,*fp3;
int loop;
fp1=(char *)malloc(LEN);
fp2=(char *)malloc(LEN);
fp3=(char *)malloc(LEN);
*fp1='a';
*fp2='b';

for(loop=0;loop<10;loop++)
{
strcpy(fp3,fp2);
strcat(fp1,fp2);
strcpy(fp2,fp1);
strcpy(fp1,fp3);
}
printf("%s\n",fp2);
aflyinghorse 2003-08-22
  • 打赏
  • 举报
回复
试试这个
#define LEN 1024

int main()
{
char *f1, *f2, *f3, *temp;
int loop;
f1 = (char *)malloc(LEN);
f2 = (char *)malloc(LEN);
f3 = (char *)malloc(LEN);
temp = (char *)malloc(LEN);

strcpy(f1, "a");
strcpy(f2, "b");
strcpy(temp, f2);
strcpy(f3, "a b ");

for (loop = 0; loop < 3; loop++)
{

strcat(f2, f1);

strcpy(f1, temp);
strcpy(temp, f2);

strcat(f3, f2);
strcat(f3, " ");

}
printf("%s\n", f3);

getchar();
}
ding198116 2003-08-22
  • 打赏
  • 举报
回复
f1 = f2;
f2 = f3;
如果你在这两句这样写
strcpy(f1, f2);
strcpy(f2, f3);
试试吧!
HitXU 2003-08-22
  • 打赏
  • 举报
回复
救命啊……

69,335

社区成员

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

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