C语言 这个程序怎么运行就崩溃?

#include<stdio.h>voidstrcopy(chars1[],chars2[]){inti,j=0;for(;s1[i]!='\0';i++){}while... #include<stdio.h>

void strcopy(char s1[],char s2[]){
int i,j=0;
for(;s1[i]!='\0';i++){}
while(s2[j]!='\0')
s1[i++]=s2[j++];
s1[i]='\0';
}

void main(){
char str1[80],str2[80];
printf("please input your string.\n");
gets(str1);
printf("nima yiyang de \n");
gets(str2);
strcopy(str1,str2);
printf("%s",str1);
}
展开
 我来答
阔海的账户
2013-07-06 · TA获得超过214个赞
知道小有建树答主
回答量:161
采纳率:0%
帮助的人:246万
展开全部
int i,j=0;只是初始化了变量j=0;而i没有初始化,是一个很大的值。

所以在执行for(;s1[i]!='\0';i++){}时,由于i很大,超过了str1[80]的长度,所以导致访问异常。

改为:
int i=0,j=0;
就可以了。

不过这段程序还有问题,就是如果str1的长度和str2的长度之和大于str1[80]定义的80个字节,当拼接字符串超过80个字节时,也会出现访问异常。
所以,在while语句
while(s2[j]!='\0')
s1[i++]=s2[j++];
内,要进行判断,就是如果i>=79,就不能再执行赋值语句,而应当跳出while循环。
宛丘山人
2013-07-06 · 长期从事大学高等数学和计算机数据结构教学
宛丘山人
采纳数:6405 获赞数:24697

向TA提问 私信TA
展开全部
错误:1.子程序第一个循环体中,变量未赋初值。
2. 多了一对花括号{}
改成如下程序,即可运行。
#include<stdio.h>
void strcopy(char s1[],char s2[])
{ int i,j=0;
for(i=0;s1[i]!='\0';i++)
while(s2[j]!='\0')
s1[i++]=s2[j++];
s1[i]='\0';}
void main()
{ char str1[80],str2[80];
printf("please input your string.\n");
gets(str1); printf("nima yiyang de \n");
gets(str2);
strcopy(str1,str2);
printf("%s",str1);}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
敏澎Q1
2013-07-05 · TA获得超过991个赞
知道小有建树答主
回答量:944
采纳率:100%
帮助的人:783万
展开全部
改这里:
str[81];

然后strcpy函数最好不要用[],要指定大小。
追问
改哪里?可不可以讲一下?
追答
改这两个地方:

char str1[80],str2[80];

void strcopy(char s1[],char s2[])

其实你自已可以调试下,看哪里出错了就知道了,有问题我再帮你看。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lihanlh2008
2013-07-06 · 超过32用户采纳过TA的回答
知道答主
回答量:177
采纳率:0%
帮助的人:99.9万
展开全部
连接字符串? 把s1[i]='\0'; 放在大括号外面
明天考试?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lqrjsy
2013-07-06
知道答主
回答量:5
采纳率:0%
帮助的人:3.1万
展开全部
变量 i 没有初始化
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式