为什么我的字符串末尾会有多余的字符?

#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/

10-14 19:12
查看更多