(C语言)从键盘上输入一个字符数组,并将其复制到另一个字符数组。

#include<stdio.h>
#include<string.h>
main(){
int i,x;
char a[5];
char b[10];

printf("请输入字符串a:\n");
gets(a);
printf("请输入字符串b:\n");
gets(b);
printf("把a复制到b后字符串b为:\n");
strcpy(b,a);
for(i=0;i<10;i++)
printf("%c",b[i]);
printf("\n");
}
这个程序的运行结果如下:
请输入字符串a:
qqqqq
请输入字符串b:
wwwwwwwwww
把a复制到b后字符串b为:
qqqqq wwww
为什么程序运行后b[6]是空而不是w,如何改正。
如何最后输出qqqqqwwwww
老师只让用strcpy(b,a); 怎么改呢?

#include<stdio.h>
#include<string.h>
main(){
int i,x;
char a[10]; //这里应该定义为10个长度,考虑越界,最好定义为16
char b[10];
printf("请输入字符串a:\n");
gets(a);
printf("请输入字符串b:\n");
gets(b);
printf("把a复制到b后字符串b为:\n");
strcat(a,b); //这里应该用字符串连接函数,将b连接到a的后面
for(i=0;i<10;i++)
printf("%c",a[i]);//这里输出的应该为字符组a才得到结果
printf("\n");
getch();
}
现在我来回答你的程序运行后b[6]是空而不是w,因为你用函数strcpy把数组a的5个q和一个‘\0’复制到b中,并将其前面的6个w覆盖,也就是说这时候的b储存为qqqqq\0wwww,然后你用%c输出,第六个当然是\0也就是空了,如果你用%s输出只输出前5个q,因为%s输出遇到‘\0’就结束。
最后来说说改正,前面已经说了,如果要输出qqqqqwwwww,就要用到字符连接函数strcat了,将b连接到a的后面,而并不是覆盖,第六个并不是\0了,而是b的第一字符w,这样也能得到结果但是会越界,并不是最好的方法,考虑用函数做比较好,在这里我就不说了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-04-24
因为strcpy会将结尾符号一并拷贝过去
b[6]是a的结尾符号\0
第2个回答  2009-04-24
因为strcpy会将结尾符号一并拷贝过去
b[6]是a的结尾符号\0
试试strcat或者自己写一个函数...
第3个回答  2009-04-24
把strcpy()改成
i=0;
while(a[i]!='\0')
{
b[i]=a[i];
i++;
}
第4个回答  2009-04-25
我觉得: char a[5],最多只能输入四个q,因为字符串结束标志“\0”若输入五个q就越界了(声明字符串的时候要空出一个额外的位置来放置空字符“\0”)。越界后数值不可靠。 所以出现的结果是不可靠的。

字符串自制函数 strcpy(str1,str2)
:表示把字符数组str2中内容自制到str1中,字符串结束标志“\o”也同时复制。自制时应满足str1的长度应该大于str2 的长度;否则复制将不正确。