鱼C论坛

 找回密码
 立即注册
查看: 4123|回复: 2

请教高手,初学c,对这道题很是迷惑

[复制链接]
发表于 2013-1-3 23:24:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
自编的字符窜连接函数,看了好久,都没看出错误,调试的时候,返回的指针对的,但是返回到主函数时指针就不对了,程序直接运行输不出连接后的字符窜,而是一些乱码或者什么都没有输出。
很奇怪,然后想了好久后把ch[50]改成了ch[100],然后在VC++上运行成功了,但是为什么?
改完后,复制到VS2008上运行,也输不出结果,后面把ch数组长度改得更大,然后就又成功了
这是什么原因?
请各位大神帮忙看看...
#include<stdio.h>
int main()
{
char *MyStrcat(char *Deststr,char *Sourstr);
char a[20],b[30];
printf("please write something:\n");
    gets(a);
printf("please write another one:\n");
gets(b);
printf("%s",MyStrcat(a,b));
printf("\n");
return 0;
}
char *MyStrcat(char *Deststr,char *Sourstr)
{
char ch[50];
char *p;
int i,j=0;
for(i=0;*Deststr!='\0';i++,j++,*Deststr++)
  ch[i]=*Deststr;
for(i=j;*Sourstr!='\0';i++,j++,*Sourstr++)
  ch[i]=*Sourstr;
    ch[i]='\0';
p=ch;
return(p);
}








小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-1-4 12:16:22 | 显示全部楼层

回帖奖励 +2 鱼币

  1. #include<stdio.h>
  2. #include <malloc.h>

  3. char *MyStrcat(char *Deststr,char *Sourstr);        //函数声明通常放在外面

  4. int main()
  5. {
  6.         char a[20],b[30];
  7.         char *p;
  8.         printf("please write something:\n");
  9.         gets(a);
  10.         printf("please write another one:\n");
  11.         gets(b);
  12.         p = MyStrcat(a,b);
  13.         printf("%s\n",p);
  14.         free(p);                                                                //这里要释放内存。
  15.         return 0;
  16. }
  17. char *MyStrcat(char *Deststr,char *Sourstr)
  18. {
  19.         char *p = (char*)malloc(50);                                //这里改成动态内存分配
  20.         int i,j=0;
  21.         for(i=0;*Deststr!='\0';i++,j++,Deststr++)
  22.           p[i]=*Deststr;
  23.         for(i=j;*Sourstr!='\0';i++,j++,Sourstr++)
  24.           p[i]=*Sourstr;
  25.                 p[i]='\0';
  26.         return(p);                //你的p指针指向的ch数组是局部变量,这个函数运行结束后,
  27.                                         //这块内存被收回,p指向的内存里面的内容就不确定了。
  28.                                         //改用动态内存分配,p指向的内存是堆中的,不会被回收,
  29.                                         //需要我们自己释放。
  30. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-1-4 16:48:40 | 显示全部楼层
嗯,懂了,谢谢
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-8-9 16:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表