为什么我的字符串末尾会有多余的字符?
#include <iostream>
using namespace std;
int main() {
int num;
cin >> num; // Reading input from STDIN
cout << "Input number is " << num << endl; // Writing output to STDOUT
char c1, s2[10];
for (int i=0; i<num; i++)
{
cin >> c1;
if(c1==0){
break;
}
s2[i] = c1;
}
cout <<"output= "<< s2;
}
输出示例4
Input number is 4
a l e x
output= alex@
为什么将“@”添加到字符串的末尾?起初我以为这是一个随机的垃圾值,但是每次我运行程序时,它总是相同的符号 最佳答案
cout
,在打印c字符串时,期望它以零终止。数组s2
尚未这样做。
您可以零初始化整个数组:
char s2[10] = {};
或者只是零终止最后一个字节: int i = 0;
for (i=0; i<num; i++)
{
cin >> c1;
if(c1==0) {
break;
}
s2[i] = c1;
}
s2[i] = '\0';
无论如何,您都需要警惕可能的缓冲区溢出(例如,如果num
太大)。另外,您可以考虑使用
std::string
而不是固定长度的数组。关于c++ - 多余的字符被添加到字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62485537/