c++ - 多余的字符被添加到字符串

标签 c++

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

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

相关文章:

c++ - 在 MPI 中拆分和传递数组 block

c++ - 从文件中读取数字到两位有效数字?

c++ - 我的 Qt QAbstractProxyModel 使用 ChartView 而不是使用 TableView 崩溃?

c++ - 带有 char、double、int 和 t 的结构的大小

c++ - WKT与GeoJson的区别(数据解析)

c++ - 在 .pro 文件中强制 32 位程序

c++ - 从指向成员的指针中恢复父级

c++ - 将 C 程序的值发布到网页

c++ - 具有不同纹理 UV 的矩形实例

c++ - const char * constexpr 在编译时和运行时求值