回 帖 发 新 帖 刷新版面

主题:串的链接,有时出来乱码,

#include "stdio.h"
   #include "stdlib.h"
   #define A  11

   typedef struct std/* 定义串*/
  { char name[A];
    int len;
   }ss;
 ss concat(ss s1,ss s2)/*串链接函数*/
  { ss  s3;
    int i;
    if(s1.len+s2.len<=A)
    {
      for(i=0;i<s1.len;i++)
      s3.name[i]=s1.name[i];
      for(i=0;i<s2.len;i++)
      s3.name[s1.len+i]=s2.name[i];
     s3.len=s1.len+s2.len;
     }
     else
      s3.len=0;
    return s3;/*返回已经连接好的串了*/
    }


  main()
  {
  ss sd,sp,s2;
  printf("kai shi qu zhi :\n");
  gets(sd.name);/* 输入串1*/
   
   gets(sp.name);/*输入串2*/

  sd.len=strlen(sd.name);/* 获得串的长度*/
  sp.len=strlen(sp.name);

  printf("\n kai shi lia jie :\n");
  s2=concat(sd,sp);/*输出串*/

  puts(s2.name);
  getch();
  }
我的是个程序的意思是 ,会两个串,进行合并,然后赋给一个变量,然后输出这个变量 ,,现在问题来了我输入两个字符串后吧,有的时候输出的时候会有乱码产生,,难道是缓冲区没有清理,但是,我用flushall() 请里了。但是还是这样,,求救啊

回复列表 (共3个回复)

沙发


其实是puts的问题,具体原因虽不明白,但是已经找到了解决的方法了。
去掉后面的puts()  
prin(ss s)
  { int i;
  for(i=0;i<s.len;i++)
   printf("%c",s.name[i]);
   }
用prin函数来进行输出,就可以了,但是为什么puts会输出乱码,,各位讨论一下

板凳


好像是讲s3这个栈变量返回去的关系吧。s3仅仅在那个函数中有效的

3 楼

要想让一个数组以字符串的形式输出,最后必须得有结束符‘\0’;也就是说假如
char a[10];a[0]='a',a[1]='b';现在要是以字符串输出肯定乱码,你要是这样
char a[10];a[0]='a',a[1]='b',a[2]='\0';再以字符串输出肯定就没问题了;所以你的程序这样修改:
ss concat(ss s1,ss s2)/*串链接函数*/
  { ss  s3;
    int i;
    if(s1.len+s2.len<=A)
    {
      for(i=0;i<s1.len;i++)
      s3.name[i]=s1.name[i];
      for(i=0;i<s2.len;i++)
      s3.name[s1.len+i]=s2.name[i];
     s3.len=s1.len+s2.len;
     }
     else
      s3.len=0;
     [size=6]s3.name[s1.len+s2.len]='\0';//[/size]要加上这句
    return s3;/*返回已经连接好的串了*/
    }

还有你头文件没有 #include “string.h”

我来回复

您尚未登录,请登录后再回复。点此登录或注册