注册 登录
编程论坛 数据结构与算法

串的定长顺序存储,帮忙看哪错了,运行后是乱码

春风吹又吹 发布于 2016-10-22 18:14, 1847 次点击
#include"stdio.h"
#include"malloc.h"
#define maxsize 256
typedef struct
{
char ch[maxsize+1];
int length;
}string;
int concat(string&t,string&s1,string&s2)
{


if(s1.length+s2.length<maxsize)
{for(int i=0;i<s1.length;i++)
t.ch[i]=s1.ch[i];
for( i=0;i<s2.length;i++)
t.ch[s1.length+i]=s2.ch[i];
t.length=s1.length+s2.length;
t.ch[t.length]='\0';
return 1;
}

else if(s1.length<maxsize)
{for(int i=0;i<s1.length;i++)
t.ch[i]=s1.ch[i];
int m=maxsize-s1.length;
for( i=0;i<m;i++)
t.ch[s1.length+i]=s2.ch[i];
t.length=maxsize;
t.ch[maxsize]='\0';
return 0;


}
else return 0;

}

int main()
{

string t,s1,s2;

char e;
int i=0;

s1.length=s2.length=0;
scanf("%c",&e);
while(e!='\n'){
s1.ch[i++]=e;
s1.length++;
scanf("%c",&e);

}
scanf("%c",&e);
while(e!='\n'){
s2.ch[i++]=e;
s2.length++;
scanf("%c",&e);

}
concat(t,s1,s2);
for(i=0;i<t.length;i++)
printf("%c",t.ch[i]);
return 1;
}
2 回复
#2
书生牛犊2016-10-22 22:54
    scanf("%c",&e);
    while(e!='\n') {
        s2.ch[i++]=e;//s2的i不用重置为0吗?

另外,出于程序健壮性的考虑,建议楼主增加一个字符串长度监测,确保两个字符串以及连接后的字符串长度都能完整不越界地存储于该定长ch数组中。




[此贴子已经被作者于2016-10-22 22:56编辑过]

#3
春风吹又吹2016-10-23 16:37
回复 2楼 书生牛犊
谢谢,问题已解决。
1