首页 新闻 会员 周边

C++程序字符串的复制

0
悬赏园豆:50 [已解决问题] 解决于 2020-04-17 16:11

include <iostream>

using namespace std;
int main()
{
char s1[100],s2[100];
int i=0;
cin.getline(s1,100);
while(s1[i]!='\0')
{ s2[i]=s1[i];
i++;
}
for(i=0;s2[i]!='\0';i++)
{ cout<<s2[i];
}
return 0;
}

最后的输出格式总是错的
有大佬可以帮我改一下吗?或者告诉我哪里错了
(本人小白,问题略微有些简单,见谅)

问题补充:

include <iostream>

using namespace std;
int main()
{
char s1[100],s2[100];
int i=0;
cin.getline(s1,100);
while(s1[i]!='\0')
{ s2[i]=s1[i];
i++;
}
i++;

	s2[i]='\0';
	cout<<s2;
return 0;

}
这是我今天又写的一个,不知道为什么之前的那个有编译错误,这个编译没问题,在复制的时候就出错了,错误格式附有图

yanchang的主页 yanchang | 初学一级 | 园豆:154
提问于:2020-04-12 22:35

格式错误是什么意思??

。淑女范erり 4年前

有没有图片,弄个截屏出来看看

Conan-jine 4年前

@。淑女范erり: 就是比如说我输入的文本是xyz,输出的结果是哦i的话覅u是的哟阿斯u调度器我·yz

yanchang 4年前

@yanchang: 应该是初始化问题,你可以在最后给s2显式赋值一个'\0'试试。

。淑女范erり 4年前
< >
分享
最佳答案
0

看到你截图理解你的意思了,这个问题的原因在于,在函数内声明的char数组,未显式初始化导致的。
s1虽然未初始化,但是在cin.getline在给数组赋值时,会将最后一个字符的下一位设置为\0
如你输入xyz,s1 = {'x', 'y', 'z', '\0',....}
而s2需要你在最后一位字符后设置为'\0'。
需要注意的是,如果字符填充满了,最后一位也应该设置为'\0',也就是数组最多存放的字符数为数组长度-1

回到你这个问题,稍作修改即可:

include <iostream>
using namespace std;
int main()
{
char s1[100],s2[100];
int i=0;
cin.getline(s1,100);
while(s1[i]!='\0')
{ s2[i]=s1[i];
i++;
}
s2[i] = '\0';//这里不做数组越界的判断是因为默认s1和s2长度一样不会溢出。实际业务场景是需要判断的。
for(i=0;s2[i]!='\0';i++)
{ cout<<s2[i];
}
return 0;
}
收获园豆:50
。淑女范erり | 小虾三级 |园豆:961 | 2020-04-14 17:21
其他回答(2)
0

你是不是输出少了换行?

Shendu.CC | 园豆:2138 (老鸟四级) | 2020-04-12 23:21

额,能帮我改进一下吗,万分感谢!

支持(0) 反对(0) yanchang | 园豆:154 (初学一级) | 2020-04-14 16:38
0

我把你的代码试了一下,我运行起来是没错的,好着嘞

Conan-jine | 园豆:1272 (小虾三级) | 2020-04-13 10:38

呃呃呃,程序没错误,可是运行没达到我的目的呀,复制的结果有错误

支持(0) 反对(0) yanchang | 园豆:154 (初学一级) | 2020-04-14 16:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册