请教一个c语言程序,请问这个程序是干什么的,并解释一下mystery是怎么运行的? 刚那个程序给错了。不好意
#include<stdio.h>intmain(void){charstring1[80];charstring2[80];printf("Entertwostring...
#include<stdio.h>
int main(void)
{
char string1[80];
char string2[80];
printf("Enter two strings: ");
scanf("%s%s",string1,string2);
mystery(string1,string2);
printf("%s",string1);
return 0;
}
void mystery(char *s1,char *s2)
{
while(*s1 != '\0')
{
s1++;
}
for(;*s1=*s2;s1++,s2++)
{
;
} 展开
int main(void)
{
char string1[80];
char string2[80];
printf("Enter two strings: ");
scanf("%s%s",string1,string2);
mystery(string1,string2);
printf("%s",string1);
return 0;
}
void mystery(char *s1,char *s2)
{
while(*s1 != '\0')
{
s1++;
}
for(;*s1=*s2;s1++,s2++)
{
;
} 展开
4个回答
展开全部
这个程序相当于库函数中的strcat函数 作用是把第二个字符串接在第一个字符串的后面。
mystery中第一个循环while是将指针指向字符串1的结束符‘\0’ , for是将字符串2的内容逐个字符的拷贝到串1中 这样就实现了strcat函数的功能 将串2接在串1的后面成为一个新的完整的字符串。
mystery中第一个循环while是将指针指向字符串1的结束符‘\0’ , for是将字符串2的内容逐个字符的拷贝到串1中 这样就实现了strcat函数的功能 将串2接在串1的后面成为一个新的完整的字符串。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把string2字符串追加到string1之后,成为新string1,并且新的string1的有效字符长度不能超过79。
更多追问追答
追问
for语句第二项不是条件吗,怎么变成赋值操作了 改成如下:
for(;*s2!='\0';s1++,s2++)
{
*s1 = *s2;
}
运行结果一样,是你所说的把第二个字符串加到第一个之后,但是for语句盖如何解释?
追答
for(;*s1=*s2;s1++,s2++)中
第二项不仅是成为条件语句,还是赋值语句。
每次循环,先执行*s1=*s2;具体地说,先将*s2的值赋值到*s1,然后*s1=*s2的返回结果是*s1,这时程序会判断*s1的值是否为0,若为0,即false,则退出循环;若不为0,即true,侧继续运行。
这里,'\0'可以等效于0。
我不知道你用的是什么运行环境,但
for(;*s2!='\0';s1++,s2++)
{
*s1 = *s2;
}
是不够完善的,因为string2中最后一个'\0'(这就是我说的最大有效字符为79,而非80的原因)没有赋值到string1的末尾,会导致输出string1时,发生内存溢出的情况,也就是在字符串的末尾出现不该出现的字符,我用VC++就是如此。
其他推荐的表示方式:
for(;*s1!='\0';s1++,s2++) *s1 = *s2;
for(;*s1;s1++,s2++) *s1 = *s2;
可以看出*s1!='\0',与*s1的效果一样,
不懂得可以再来问。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
嗯 可以理解为是把S2字符串 复制 到S1字符串后面 并输出 组成一个新的字符串
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果s1是“abc” s2是“def”处理后s1是“abcdef”但s1总长度貌似是80吧 呵呵 忘了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询