
C语言字符数组输出问题,下面两个程序只有在第10行有区别,可是第一个程序输出的结果中有乱码,请问
C语言字符数组输出问题,下面两个程序只有在第10行有区别,可是第一个程序输出的结果中有乱码,请问这两个程序的区别是什么啊???求解释,在线等#include<stdio....
C语言字符数组输出问题,下面两个程序只有在第10行有区别,可是第一个程序输出的结果中有乱码,请问这两个程序的区别是什么啊???求解释,在线等
#include <stdio.h>
#include <stdlib.h>
int main()
{
char str[80],c[80];
int i,j;
gets(str);
gets(c);
for(i=0;str[i]!='\0';i++);
for(j=0;c[j]!='\0';j++,i++)
str[i]=c[j];
printf("%s\n",str);
system("pause");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
char str[80],c[80];
int i,j;
gets(str);
gets(c);
for(i=0;str[i]!='\0';i++);
for(j=0;str[j]!='\0';j++,i++)
str[i]=c[j];
printf("%s\n",str);
system("pause");
return 0;
} 展开
#include <stdio.h>
#include <stdlib.h>
int main()
{
char str[80],c[80];
int i,j;
gets(str);
gets(c);
for(i=0;str[i]!='\0';i++);
for(j=0;c[j]!='\0';j++,i++)
str[i]=c[j];
printf("%s\n",str);
system("pause");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
char str[80],c[80];
int i,j;
gets(str);
gets(c);
for(i=0;str[i]!='\0';i++);
for(j=0;str[j]!='\0';j++,i++)
str[i]=c[j];
printf("%s\n",str);
system("pause");
return 0;
} 展开
展开全部
第一个程序,字符串中最后一行加一个把'\0'加上去才不会出现乱码。
属于字符串连接;
第二个str本身就有'\0',不会出现乱码的。属于字符串拷贝,而且不一定正确,当c长于str时,就截断,当短于str时,还有部分覆盖。
属于字符串连接;
第二个str本身就有'\0',不会出现乱码的。属于字符串拷贝,而且不一定正确,当c长于str时,就截断,当短于str时,还有部分覆盖。
追问
第一个程序,我输入完gets(str)之后,未输入的部分不应该全部是\0了吗?
然后输入c(str)之后,他只是把str里面的\0替换了,剩下的那些应该还是\0的呀
展开全部
for(j=0;c[j]!='\0';j++,i++) //这个写法,只是保证了c中的有效数据赋值到了str中,但str最后一位没有赋值\0,导致出现乱码
str[i]=c[j];
str[i]='\0'; //补上这句,就好了
第二个写法,有点诡异,诈一看是错的,细一看,真是好代码
for(j=0;str[j]!='\0';j++,i++) //这里保证了str最后一位赋值0了!
str[i]=c[j];
str[i]=c[j];
str[i]='\0'; //补上这句,就好了
第二个写法,有点诡异,诈一看是错的,细一看,真是好代码
for(j=0;str[j]!='\0';j++,i++) //这里保证了str最后一位赋值0了!
str[i]=c[j];
更多追问追答
追问
第一个程序,我输入完gets(str)之后,未输入的部分不应该全部是\0了吗?
然后输入c(str)之后,他只是把str里面的\0替换了,剩下的那些应该还是\0的呀
追答
我输入完gets(str)之后,未输入的部分不应该全部是\0了吗?
答:不是!只有最后一个有效字符之后是\0,其他部分是不确定信息!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没发现乱码啊
追问
第一个程序,输出str之后,貌似系统里面没有\0,不知道为啥啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询