原因在于字符数组里存放内容没有字符结束标志 '\0'。例子1
没有‘\0’
#include<iostream>
using namespace std;
int main() {
char a[9];
for (int i = 0; i < 8; i++)
{
cin >> a[i];
}
cout << a << endl;
return 0;
}
输入 123456789
输出 123456789烫烫烫?W杩岨O
有‘\0’
#include<iostream>
using namespace std;
int main() {
char a[9];
for (int i = 0; i < 9; i++)
{
cin >> a[i];
}
a[8] = '\0';//重点
cout << a << endl;
return 0;
}
输入 12345678
输出 12345678
除了for循环会出现这种情况,还有下面这种
#include<iostream>
using namespace std;
int main() {
char words[] = { 'a', 'b', 'c', 'd', 'e' };
cout << words << endl;
return 0;
}
输出 abcde烫烫烫蘐亍您4t
同样解决方法还是加上'\0',
#include<iostream>
using namespace std;
int main() {
char words[] = { 'a', 'b', 'c', 'd', 'e','\0' };
cout << words << endl;
return 0;
}
输出 abcde
其他可以避免出现输出汉字方法
方法一
直接用cin输入字符数组,最后系统会自动加上\0空字符,且它占数组的一个char内存
#include<iostream>
using namespace std;
int main() {
char a[9];
cin >> a ;//最后会自动加上\0空字符,且它占数组的一个char内存
cout << a << endl;
return 0;
}
输入 12345678
输出 12345678
注意
运用cin输入一定要给'\0'保留一个空间存放,要不然就会出现’\0‘放到数组之后的内存,出现栈损坏
方法二
可以运用get()函数或getline函数,同样最后系统会自动加上\0空字符,且它占数组的一个char内存
例子
#include<iostream>
using namespace std;
int main()
{
char ch[80];
cin.getline(ch, 30);//可以换成cin.get(ch, 30)
cout << ch << endl;
return 0;
}
输入 12345678
输出 12345678
个人看法,如有错误,请指出。
如有侵权,请联系删除