C语言.帮忙看看那错了

来源:百度知道 编辑:UC知道 时间:2024/09/27 12:18:03
#include <string.h>
void main()
{
int i;
char a[50],b[50],s[100],*pa[50],*pb[50],*ps[100];
for(i=0;i<100;i++)
{
ps[i]=&s[i];
}
for(i=0;i<50;i++)
{
pa[i]=&a[i];
pb[i]=&b[i];
}
gets(pa);
gets(pb);
strcat(ps,pa);
strcat(ps,pb);
puts(ps);

}
这源程序那里错了!
还是会吖

字符串未初始化,而用strcat函数就是错误的了,strcat是以字符串结尾指针'\0'来操作字符串的。

#include "string.h"
void main()
{
int i;
char a[50],b[50],s[100],*pa[50],*pb[50],*ps[100];
for(i=0;i<100;i++)
{
ps[i]=&s[i];
}
for(i=0;i<50;i++)
{
pa[i]=&a[i];
pb[i]=&b[i];
}
gets(*pa);
gets(*pb);
strcat(*ps,*pa);
strcat(*ps,*pb);
puts(*ps);

}

我是一个刚学c不久的人,对你这段代码有很多疑惑
1:你定义的a,b,s三个数组没有值怎么能当作计算式的右值使用?这样不算非法吗?
2:pa,pb,ps作为左值得到值以后又用gets()去取字符,为什么?
3:gets()是在你输入一个回车的时候停止读取数据,同时把回车保留在缓存里,下一次gets()的时候,直接先读取这个回车,而不是你输入的数据,所以,是不是应该在第一个gets()后加一个清空缓存的操作更适合?
4:strcat()的原型:extern char *strcat(char *dest,char *src);即把把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'。同时要求src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。现在你的ps已经没有空间来存储数据了,强行这么操作会有什么结果?
以上是我的一些疑惑,可能跟你的问题没什么关系,不过,希望能得到解答,谢谢