
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);
} 展开
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);
} 展开
5个回答
展开全部
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循环。
所以在执行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循环。
展开全部
错误: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);}
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);}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
改这里:
str[81];
然后strcpy函数最好不要用[],要指定大小。
str[81];
然后strcpy函数最好不要用[],要指定大小。
追问
改哪里?可不可以讲一下?
追答
改这两个地方:
char str1[80],str2[80];
void strcopy(char s1[],char s2[])
其实你自已可以调试下,看哪里出错了就知道了,有问题我再帮你看。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
连接字符串? 把s1[i]='\0';
放在大括号外面
明天考试?
明天考试?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询