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;
}
最后的输出格式总是错的
有大佬可以帮我改一下吗?或者告诉我哪里错了
(本人小白,问题略微有些简单,见谅)
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;
}
这是我今天又写的一个,不知道为什么之前的那个有编译错误,这个编译没问题,在复制的时候就出错了,错误格式附有图
看到你截图理解你的意思了,这个问题的原因在于,在函数内声明的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;
}
你是不是输出少了换行?
额,能帮我改进一下吗,万分感谢!
我把你的代码试了一下,我运行起来是没错的,好着嘞
呃呃呃,程序没错误,可是运行没达到我的目的呀,复制的结果有错误
格式错误是什么意思??
– 。淑女范erり 4年前有没有图片,弄个截屏出来看看
– Conan-jine 4年前@。淑女范erり: 就是比如说我输入的文本是xyz,输出的结果是哦i的话覅u是的哟阿斯u调度器我·yz
– yanchang 4年前@yanchang: 应该是初始化问题,你可以在最后给s2显式赋值一个'\0'试试。
– 。淑女范erり 4年前